Как получить user_id внутри функции контроллера?

avatar
Devops Training
9 августа 2021 в 07:04
148
1
0

Я разрабатываю некоторые грубые API-интерфейсы в рамках Apiato, и он также подключен к моей базе данных, теперь я хочу разработать один API-интерфейс, который используется для публикации сведений в моей базе данных (только действительный пользователь может публиковать эти данные) для этого я хочу чтобы получить этот идентификатор пользователя внутри функции загрузки, я не получаю этот идентификатор пользователя. Как получить этот идентификатор, пожалуйста, помогите мне решить эту проблему..

error i am getting when i try to send request in postman

Illuminate\Database\QueryException: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'user_id' cannot be null (SQL: insert into `blogs_table` (`name`, `price`, `image`, `rating`, `country`, `description`, `user_id`, `updated_at`, `created_at`) values (maldives, 9400, ssssssssssss, 5, india, wwwwwwwwww, ?  2021-08-09 12:22:58, 2021-08-09 12:22:58)) in file /home/vagrant/code/apiato/vendor/laravel/framework/src/Illuminate/Database/Connection.php on line 692

BlogModel.php

<?php

namespace App\Containers\UserRegistration\UserContainer\Models;

use App\Ship\Parents\Models\Model;

class BlogModel extends Model
{
    protected $table='blogs_table';
    protected $fillable = [
        'name','price','image','country','rating','description','user_id'
    ];

    protected $attributes = [

    ];

    protected $hidden = [

    ];

    protected $casts = [

    ];

    protected $dates = [
        'created_at',
        'updated_at',
    ];

    /**
     * A resource key to be used in the serialized responses.
     */
    protected string $resourceKey = 'BlogModel';
    public function user(){
         return $this->belongsTo(UserContainer::class);
        //return $this->belongsTo('C:\apiato-project\apiato\app\Containers\UserRegistration\UserContainer\Models\UserContainer.php','user_id');
    }
}

UserContainer.php

<?php

namespace App\Containers\UserRegistration\UserContainer\Models;
use Tymon\JWTAuth\Contracts\JWTSubject;
use App\Ship\Parents\Models\Model;

class UserContainer extends Model implements JWTSubject
{
    protected $fillable = [
        'fullName',
        'email',
        'password',
        'mobile'
    ];

    protected $attributes = [

    ];

    protected $hidden = [

    ];

    protected $casts = [

    ];

    protected $dates = [
        'created_at',
        'updated_at',
    ];

    /**
     * A resource key to be used in the serialized responses.
     */
    protected string $resourceKey = 'UserContainer';
    public function getJWTIdentifier()
    {
        return $this->getKey();
    }

    public function getJWTCustomClaims()
    {
        return [];
    }
    public function blogs(){
         return $this->hasMany(BlogModel::class, 'user_id');
       // return $this->hasMany('C:\apiato-project\apiato\app\Containers\UserRegistration\UserContainer\Models\BlogModel','user_id');
    }
}

BlogController.php

<?php

namespace App\Containers\UserRegistration\UserContainer\UI\API\Controllers;

use App\Containers\UserRegistration\UserContainer\UI\API\Requests\CreateUserContainerRequest;
use App\Containers\UserRegistration\UserContainer\UI\API\Requests\DeleteUserContainerRequest;
use App\Containers\UserRegistration\UserContainer\UI\API\Requests\GetAllUserContainersRequest;
use App\Containers\UserRegistration\UserContainer\UI\API\Requests\FindUserContainerByIdRequest;
use App\Containers\UserRegistration\UserContainer\UI\API\Requests\UpdateUserContainerRequest;
use App\Containers\UserRegistration\UserContainer\UI\API\Transformers\UserContainerTransformer;
use App\Containers\UserRegistration\UserContainer\Actions\CreateUserContainerAction;
use App\Containers\UserRegistration\UserContainer\Actions\FindUserContainerByIdAction;
use App\Containers\UserRegistration\UserContainer\Actions\GetAllUserContainersAction;
use App\Containers\UserRegistration\UserContainer\Actions\UpdateUserContainerAction;
use App\Containers\UserRegistration\UserContainer\Actions\DeleteUserContainerAction;
use App\Ship\Parents\Controllers\ApiController;
use Illuminate\Http\JsonResponse;

use Illuminate\Http\Request;

use App\Containers\UserRegistration\UserContainer\Models\BlogModel;

class BlogController extends ApiController
{
    
    public function upload(Request $request ){
        //dd($request->all());
        $blog = new BlogModel();
        $blog->name=$request->input('name');
        $blog->price=$request->input('price');
        $blog->image=$request->input('image');
        $blog->rating=$request->input('rating');
        $blog->country=$request->input('country');
        $blog->description=$request->input('description');
        $blog->user_id = auth()->id();    
        $blog->save();
        return response()->json(['success'=>'successfully added','blogs'=>$blog]);
    }
}
Источник
Nico Haase
9 августа 2021 в 07:12
0

Что вы пытались решить проблему? Где ты застрял?

Devops Training
9 августа 2021 в 07:14
0

используйте класс Auth, и в отношениях внешнего ключа я снимаю жестко закодированный путь, но оба пути не работают

Nico Haase
9 августа 2021 в 07:41
0

Что возвращает auth()->id()?

Devops Training
9 августа 2021 в 07:43
0

@NicoHaase, он возвращает нулевое значение

Cameron
9 августа 2021 в 16:10
0

если Auth::user()->id; имеет значение null, то вы не передаете токен носителя или учетные данные пользователя на конечные точки API или не используете надлежащее промежуточное ПО. Если вы используете Sanctum, это видео поможет вам youtube.com/watch?v=MT-GJQIY3EU

Devops Training
10 августа 2021 в 05:28
0

@Cameron, на самом деле я передаю токен Bearer в заголовках, я использую аутентификацию JWT.

Cameron
10 августа 2021 в 15:16
0

@DevopsTraining убедитесь, что вы используете промежуточное ПО auth:api на рассматриваемом маршруте, иначе оно не будет знать, как использовать ваш токен носителя для получения информации о пользователе. (при использовании паспорта) при использовании святилища посмотрите видео, которое я разместил выше, о том, какое промежуточное программное обеспечение использовать. По сути, вам нужно получить его, чтобы Auth::user() возвращался с вашего маршрута API раньше всего. если его значение null, как вы сказали, значит, что-то не настроено должным образом в вашем промежуточном программном обеспечении или маршрутах.

Ответы (1)

avatar
S N Sharma
9 августа 2021 в 07:27
-2

Использовать аутентификацию в контроллере

use Illuminate\Support\Facades\Auth

Попробовать

$blog->user_id = auth()->user()->id;  

Или

$blog->user_id = Auth::id();
Devops Training
9 августа 2021 в 07:40
0

@S N Sharma, он не принимает идентификатор пользователя

Cameron
9 августа 2021 в 16:09
0

Что вы используете для аутентификации вашего API? Святилище? Заграничный пасспорт? Защищен ли маршрут промежуточным программным обеспечением auth или auth:api? Вы используете токен на предъявителя, чтобы подтвердить, что вы пользователь, который может публиковать сообщения?