我使用 Laravel Passport 创建了一个身份验证控制器,但结果与通常不同。变量
$token = $user->createToken('TestApp')->accessToken;
不会在 oauth_access_tokens
表中生成标记,而是在 personal_access_token
表中创建标记
我的注册控制器是
public function register(Request $request)
{
$validator = Validator::make($request->all(), [
'name' => 'required',
'username' => 'required|unique:users,username',
'email' => 'required|email|unique:users,email',
'password' => 'required|confirmed',
'phone' => 'required',
]);
if ($validator->fails()) {
return response()->json(['error'=>$validator->errors()], 401);
}
$input = $request->all();
$input['password'] = bcrypt($input['password']);
$user = User::create($input);
$verifyUser = UserVerfication::create([
'user_id' => $user->id,
'token' => sha1(time())
]);
\Mail::to($user->email)->send(new VerifyMail($user));
$token = $user->createToken('TestApp')->accessToken;
return response()->json([
'success' => true,
'message' => 'Registration Success',
'data' => array('APItoken' => $token, 'user' => $user)
], 200);
}
结果:
"APItoken": {
"name": "LinwokApp",
"abilities": [
"*"
],
"tokenable_id": 13,
"tokenable_type": "App\\Models\\User",
"updated_at": "2021-09-22T08:55:12.000000Z",
"created_at": "2021-09-22T08:55:12.000000Z",
"id": 11},
我不知道问题是否仍然有效,但我遇到了同样的问题并找到了解决方案。
查看您拥有 HasApiTokens 的命名空间。
我用过:
使用 Laravel\Sanctum\HasApiTokens;
而不是
使用 Laravel\Passport\HasApiTokens;
这导致了问题
一切都一样正确。在您的用户模型中,您应该调用“use Laravel\Passport\HasApiTokens”而不是“use Laravel\Sanctum\HasApiTokens”。默认情况下,Laravel 使用 Sanctum 配置。
当你使用 Laravel Passport 时,你必须替换“use Laravel\Sanctum\HasApiTokens;” 与“使用 Laravel\Passport\HasApiTokens;”在 User.php 中
这意味着您使用的是 Sanctum 而不是 Passport
改变
$token = $user->createToken('TestApp')->accessToken;
到
$token = $user->createToken('TestApp')->plainTextToken;
我正在使用 Laravel 10
我遇到了同样的问题,经过大量研究后我发现我忘记安装 Passport
要安装,我运行了以下命令
php artisan passport:install
还有一件事就是检查用户模型是否正在使用
use Laravel\Passport\HasApiTokens;
不是
use Laravel\Sanctum\HasApiTokens;