【问题标题】:Laravel Passport Token doesn't return series of codeLaravel Passport Token 不返回一系列代码
【发布时间】:2021-08-29 17:47:56
【问题描述】:

我目前很困惑为什么我的令牌响应 JSON 不提供令牌代码。

"token": {
    "token": {
        "name": "appToken",
        "abilities": [
            "*"
        ],
        "tokenable_id": 1,
        "tokenable_type": "App\\Models\\User",
        "updated_at": "2021-08-29T17:35:00.000000Z",
        "created_at": "2021-08-29T17:35:00.000000Z",
        "id": 7
    }
},

这是响应的代码。

public function login()
{
    if (Auth::attempt(['email' => request('email'), 'password' => request('password')])) {
        $user = Auth::user();
        $success['token'] = $user->createToken('appToken')->accessToken;
       //After successfull authentication, notice how I return json parameters
        return response()->json([
          'success' => true,
          'token' => $success,
          'user' => $user
      ]);
    } else {
   //if authentication is unsuccessfull, notice how I return json parameters
      return response()->json([
        'success' => false,
        'message' => 'Invalid Email or Password',
    ], 401);
    }
}

我想要那些验证码:Bearer

【问题讨论】:

    标签: laravel token laravel-passport


    【解决方案1】:

    如果你使用的是第八版的 Laravel。在用户模型中 将 Sanctum\HasApiTokens 调用替换为 Passport\HasApiTokens

    替换如下

    use Laravel\Sanctum\HasApiTokens;
    

    通过

    use Laravel\Passport\HasApiTokens;
    

    【讨论】:

      【解决方案2】:

      您是否阅读过Laravel Passport Documentation 的密码授权令牌?

      Once you have created a password grant client, you may request an access token by issuing a POST request to the /oauth/token route with the user's email address and password.

      您必须在控制器的登录功能中执行以下操作:

      $response = Http::asForm()->post('http://passport-app.com/oauth/token', [
          'grant_type' => 'password',
          'client_id' => 'client-id',
          'client_secret' => 'client-secret',
          'username' => $request->email,
          'password' => $request->password,
          'scope' => '',
      ]);
      

      然后,您将能够从您的$response 获得access_tokenrefresh_token

      $response->access_token;
      $response->refresh_token;
      

      【讨论】:

      • 我试过了,但它一直在加载。我硬编码了需要的数据,如client_id、client_secret、用户名和密码,但仍然无法返回
      【解决方案3】:

      当使用auth()->user()->createToken('user')时,它的返回数据如下所示

      {
          "status": true,
          "token": {
              "accessToken": {
                  "name": "user",
                  "abilities": [
                      "*"
                  ],
                  "tokenable_id": 1,
                  "tokenable_type": "App\\Models\\User",
                  "updated_at": "2021-10-08T06:26:34.000000Z",
                  "created_at": "2021-10-08T06:26:34.000000Z",
                  "id": 11
              },
              "plainTextToken": "11|Gl99gx8sfNVV4wxhlEQ2NBl37aGz1RpFASLIRfDP"
          }
      }
      

      所以您可以使用auth()->user()->createToken('user')->plainTextToken 获得令牌。所以帮助你。

      【讨论】:

        【解决方案4】:

        我认为您必须在您的用户模型顶部添加以下内容并在User 类中添加use HasApiTokens

        use Laravel\Passport\HasApiTokens;
        
        
        class User extends Authenticatable {
            use HasApiTokens, Notifiable;
        }

        【讨论】:

          猜你喜欢
          • 2015-03-06
          • 2023-02-04
          • 2021-06-21
          • 2017-08-06
          • 2021-11-15
          • 1970-01-01
          • 1970-01-01
          • 2023-03-03
          • 1970-01-01
          相关资源
          最近更新 更多