我将Angular-7用作前端,将Laravel-5.8用作Web应用程序的后端。
ApiController.php
public function login(Request $request)
{
$request->validate([
'email' => 'required|string|email',
'password' => 'required|string',
'remember_me' => 'boolean'
]);
$credentials = request(['email', 'password']);
$credentials['active'] = 1;
$credentials['deleted_at'] = null;
if(!Auth::attempt($credentials))
return response()->json([
'message' => 'Unauthorized'
], 401);
$user = $request->user();
$res = User::with('roles')->find($user->id);
$tokenResult = $user->createToken('MyApp')->accessToken;
$token = $tokenResult->token;
if ($request->remember_me)
$token->expires_at = Carbon::now()->addWeeks(13);
$token->save();
return response()->json([
'access_token' => $tokenResult->accessToken,
'token_type' => 'Bearer',
'expires_at' => Carbon::parse($tokenResult->token->expires_at)->toDateTimeString(),
'user' => response()->json($res)->original
]);
}
在Angular前端中,当我单击“登录”页面上的“提交”时,它应该重定向到主页。但是我遇到了这个错误:
{消息:“试图获取非对象的属性'token'”,例外:“ ErrorException”,文件:“ C:\ xampp \ htdocs \ clientportal-app \ backend \ app \ Http \ Controllers \ ApiController。 php”,第212行,跟踪:Array(35)}
当我从上面的代码检查Laravel ApiController的212行时,这就是我所拥有的:
$ token = $ tokenResult->令牌;
我该如何解决?
答案 0 :(得分:0)
Laravel Passport需要以下配置。
用户模型需要使用HasApiTokens
特征。
class User extends Authenticatable
{
use Notifiable, HasApiTokens;
}
需要将护照路线添加到boot()
的{{1}}方法中
AuthServiceProvider
最后在public function boot()
{
$this->registerPolicies();
Passport::routes();
}
配置文件中将api驱动程序更改为通行证。
auth
您需要迁移Passport表
'api' => [
'driver' => 'passport',
'provider' => 'users',
]
并生成加密密钥
php artisan migrate
清除缓存
php artisan passport:install
并提供您的应用
php artisan config:cache