经过两天对该问题的调查并阅读了有关此问题的所有问题/解决方案,我决定与大家分享此问题。
我当前的主要问题是:
laravel_token不是使用使用自己的API的Laravel通行证创建的。
但是,它是在用户登录时创建的。
运行:
有关项目的简要说明
具有一个下订单系统API,可以由管理员或网站访问者下订单。
两者都将使用API。
所以我有2位警卫:管理员,用户
这是我所做的:
这是我的config \ auth.php:
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'admin' => [
'driver' => 'session',
'provider' => 'admins'
],
'admin-api' => [
'driver' => 'passport',
'provider' => 'admins'
],
'api' => [
'driver' => 'passport',
'provider' => 'users',
],
],
-在用户和管理员模型中添加了HasApiTokens
-在管理员模型中添加了警卫姓名
管理员模型
protected $guard = 'admin';
protected $guard_name = 'admin';
app \ Http \ Kernel.php
protected $middlewareGroups = [
'web' => [
....
\Laravel\Passport\Http\Middleware\CreateFreshApiToken::class,
],
'api' => [
'throttle:60,1',
'bindings',
],
app \ Providers \ AuthServiceProvider.php
protected $policies = [
'App\Model' => 'App\Policies\ModelPolicy',
];
public function boot()
{
$this->registerPolicies();
Passport::routes();
Passport::tokensExpireIn(Carbon::now()->addDays(15));
Passport::refreshTokensExpireIn(Carbon::now()->addDays(30));
}
Api路线
...
//admin CRUD orders
Route::middleware('auth:admin-api')->group(function(){
Route::apiResource('orders', 'Api\OrderController');
}); //works fine because admin user needs to login
//when consuming own API, wont work!!
//I was thinking passport needs a GET request to
//create Cookie, it is still not working if I remove it
Route::middleware('auth:api')->group(function(){
Route::get('orders/refresh-token', 'Api\OrderController@refreshToken')->name('orders.refresh-token');
//when form is submitted
Route::put('orders/complete-store-order', 'Api\OrderController@completetStore')->name('orders.complete-store-order');
});
...
编译js文件时添加了标头:
let token = document.head.querySelector('meta[name="csrf-token"]');
window.axios.defaults.headers.common = {
'X-Requested-With': 'XMLHttpRequest',
'Accept': 'application/json',
'Content-Type': 'application/json',
'X-CSRF-TOKEN': token.content,
};
我当前的问题是:
使用自己的API时不会生成laravel_token
cookie,但是会在Admin user
登录时生成它。
我在护照文件中找到的内容:
1)在句柄功能下的文件vendor\laravel\passport\src\Http\Middleware\CreateFreshApiToken.php
第48行中使用自己的API 时:$ gurad为空
2)在同一文件行中使用自己的API时:在功能:requestShouldReceiveFreshToken
下的$request->user($this->guard)
:null
总是 {{1}},因为没有用户,但是当用户登录时使用Passport时,它不是空的,它将生成Cookie并正常运行。
使用自己的API时如何填充用户??
这是我的请求标头上的一些屏幕截图,...可以帮上忙:
答案 0 :(得分:0)
可能需要在标头中插入用户令牌才能执行auth API调用。
Authorization: Bearer {{$token}}
我使用了这个简单的教程:https://medium.com/techcompose/create-rest-api-in-laravel-with-authentication-using-passport-133a1678a876