laravel - 如何使用 Laravel 5.6 Passport 从不同的表和 Guard 制作登录 API
问题描述
如何使用 Laravel 5.6 护照从其他表(访问者,而不是用户)和不同的守卫(访问者)制作登录 API 令牌。
当我使用默认的 laravel auth 表(users )时它可以工作,但我需要从访问者表登录。
这是我的 auth.php
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'passport',
'provider' => 'users',
],
'visitor' => [
'driver' => 'session',
'provider' => 'visitors',
],
'visitor-api' => [
'driver' => 'passport',
'provider' => 'visitors',
],
],
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\User::class,
],
'visitors' => [
'driver' => 'eloquent',
'model' => App\Visitor::class,
],
],
这是我的 AuthControlloer for API
public function login(Request $request)
{
$request->validate([
'email' => 'required|string|email',
'password' => 'required|string',
'remember_me' => 'boolean'
]);
if (!Auth::guard('visitor')->attempt(['email' => $request->email, 'password' => $request->password], $request->remember))
return response()->json(['message' => 'Unauthorized'], 401);
$user = $request->user();
$tokenResult = $user->createToken('Personal Access Token');
$token = $tokenResult->token;
if ($request->remember_me)
$token->expires_at = Carbon::now()->addWeeks(1);
$token->save();
return response()->json([
'access_token' => $tokenResult->accessToken,
'token_type' => 'Bearer',
'expires_at' => Carbon::parse(
$tokenResult->token->expires_at
)->toDateTimeString()
]);
}
当我在邮递员中测试时出现此错误消息
"message": "Call to a member function createToken() on null",
解决方案
使用$request->user()
只会检索默认守卫的用户。
要获取用户,您需要做Auth::guard('visitor')->user()
的是获取用户。
然后,您将能够调用createToken()
用户,前提是您已将HasApiTokens
特征添加到模型中。
推荐阅读
- docker - Docker - 如何通过 jwilder nginx-proxy 公开端口?
- c# - 如何从代码运行 Azure DevOps 管道?
- c++ - 为什么循环没有中断,并且 if 条件也没有按预期工作?
- reactjs - 登录后我的自定义路由无法正常工作
- php - 在 yii 框架中调用未定义的方法 stdClass::save()
- navigation - 想要在渐进式 Web 应用程序中使用 Navigation API 并想要添加自定义语音消息
- c# - Unity PlayMaker - 找不到动作脚本
- sql - MSSql - 选择语句不适用于所有列
- git - Git如何查看从哪个分支创建的分支
- wpf - 如何将 treeViewItem.name 设置为 1.1