Laravel Passport 不返回令牌

问题描述 投票:0回答:5

我使用 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},
laravel laravel-8 laravel-passport
5个回答
36
投票

我不知道问题是否仍然有效,但我遇到了同样的问题并找到了解决方案。

查看您拥有 HasApiTokens 的命名空间。

我用过:

使用 Laravel\Sanctum\HasApiTokens;

而不是

使用 Laravel\Passport\HasApiTokens;

这导致了问题


1
投票

一切都一样正确。在您的用户模型中,您应该调用“use Laravel\Passport\HasApiTokens”而不是“use Laravel\Sanctum\HasApiTokens”。默认情况下,Laravel 使用 Sanctum 配置。


1
投票

当你使用 Laravel Passport 时,你必须替换“use Laravel\Sanctum\HasApiTokens;” 与“使用 Laravel\Passport\HasApiTokens;”在 User.php 中


0
投票

这意味着您使用的是 Sanctum 而不是 Passport

改变

$token =  $user->createToken('TestApp')->accessToken;

$token =  $user->createToken('TestApp')->plainTextToken;

0
投票

我正在使用 Laravel 10

我遇到了同样的问题,经过大量研究后我发现我忘记安装 Passport

要安装,我运行了以下命令

php artisan passport:install

还有一件事就是检查用户模型是否正在使用

use Laravel\Passport\HasApiTokens;

不是

use Laravel\Sanctum\HasApiTokens;
© www.soinside.com 2019 - 2024. All rights reserved.