Я разрабатываю некоторые грубые 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]);
}
}
Что вы пытались решить проблему? Где ты застрял?
используйте класс Auth, и в отношениях внешнего ключа я снимаю жестко закодированный путь, но оба пути не работают
Что возвращает
auth()->id()
?@NicoHaase, он возвращает нулевое значение
если Auth::user()->id; имеет значение null, то вы не передаете токен носителя или учетные данные пользователя на конечные точки API или не используете надлежащее промежуточное ПО. Если вы используете Sanctum, это видео поможет вам youtube.com/watch?v=MT-GJQIY3EU
@Cameron, на самом деле я передаю токен Bearer в заголовках, я использую аутентификацию JWT.
@DevopsTraining убедитесь, что вы используете промежуточное ПО auth:api на рассматриваемом маршруте, иначе оно не будет знать, как использовать ваш токен носителя для получения информации о пользователе. (при использовании паспорта) при использовании святилища посмотрите видео, которое я разместил выше, о том, какое промежуточное программное обеспечение использовать. По сути, вам нужно получить его, чтобы Auth::user() возвращался с вашего маршрута API раньше всего. если его значение null, как вы сказали, значит, что-то не настроено должным образом в вашем промежуточном программном обеспечении или маршрутах.