【问题标题】:when I return access token in json it did not appears in the response - Laravel当我在 json 中返回访问令牌时,它没有出现在响应中 - Laravel
【发布时间】:2022-08-20 14:57:41
【问题描述】:

我正在使用 Laravel 护照制作身份验证 api 当我尝试返回访问令牌时,我得到了这个:

\"access_token\": {
            \"name\": \"authToken\",
            \"abilities\": [
                \"*\"
            ],
            \"tokenable_id\": 60,
            \"tokenable_type\": \"App\\\\Models\\\\User\",
            \"updated_at\": \"2022-06-03T17:07:16.000000Z\",
            \"created_at\": \"2022-06-03T17:07:16.000000Z\",
            \"id\": 12
        }
    },
    \"message\": \"data has been retrieved\"
}

我不知道令牌在哪里 这是我的登录控制器

$rules =[
                \'email\' => \'email|required\',
                \'password\' => \'required\'
            ];


        $validator = Validator::make($request->all(), $rules);
        if ($validator->fails()) {
            return response()->json([\'message\' => \'there is been an error\', \'error message\' => $validator->errors()]);
        }


        $loginData = $request->input();
        if (!auth()->attempt($loginData)) {
            return response([\'message\' => \'Invalid credentials\']);
        }

        $user = $request->user();

        $data[\'user\'] = $user;
        $data[\'access_token\'] = $user->createToken(\'authToken\')->accessToken;
        return response()->json([$data, \"message\" => \"data has been retrieved\"]) ; 
  • 你读过 Passport 文档吗? laravel.com/docs/9.x/passport#requesting-tokens 您需要通过 guzzle 或任何类似的 http 客户端访问 oauth/authorize 端点才能请求新令牌。
  • 我读了它,但我在另一个项目中使用了相同的代码并且它有效

标签: laravel laravel-passport


【解决方案1】:

我认为您已经实现了使用 laravel 护照所需的所有命令。 这使得可以使用刷新令牌。 尝试这个:

use Laravel\Passport\Client as OClient;
use GuzzleHttp\Client;


public function login(Request $request){
    ....      
      // $laravelPasswordGrantClientId - this is the id of the client whose database you have
      $oClient = OClient::find($laravelPasswordGrantClientId);
      return response()->json($this->getTokenAndRefreshToken($oClient, request('email'), request('password')),200);
  }




public function getTokenAndRefreshToken(OClient $oClient, $email, $password) {
      $oClient = OClient::find($laravelPasswordGrantClientId);
      $http = new Client;
      $response = $http->request('POST', 'http://your.domain.com/oauth/token', [
          'form_params' => [
              'grant_type' => 'password',
              'client_id' => $oClient->id,
              'client_secret' => $oClient->secret,
              'username' => $email,
              'password' => $password,
              'scope' => '*',
          ],
      ]);

      $result = json_decode((string) $response->getBody(), true);
      return $result;
  }

【讨论】:

    【解决方案2】:

    应用程序/模型/User.php

    <?php
    
    namespace App\Models;
    
    // use Illuminate\Contracts\Auth\MustVerifyEmail;
    use Illuminate\Database\Eloquent\Factories\HasFactory;
    use Illuminate\Foundation\Auth\User as Authenticatable;
    use Illuminate\Notifications\Notifiable;
    //use Laravel\Sanctum\HasApiTokens;
    use Laravel\Passport\HasApiTokens;
    
    class User extends Authenticatable
    {
        use HasApiTokens, HasFactory, Notifiable;
    
        /**
         * The attributes that are mass assignable.
         *
         * @var array<int, string>
         */
        protected $fillable = [
            'name',
            'email',
            'password',
        ];
    
        /**
         * The attributes that should be hidden for serialization.
         *
         * @var array<int, string>
         */
        protected $hidden = [
            'password',
            'remember_token',
        ];
    
        /**
         * The attributes that should be cast.
         *
         * @var array<string, string>
         */
        protected $casts = [
            'email_verified_at' => 'datetime',
        ];
    }
    

    确保在 User.php 中有 Laravel\Passport\HasApiTokens;

    【讨论】:

      猜你喜欢
      • 2012-07-22
      • 1970-01-01
      • 1970-01-01
      • 2021-01-26
      • 2017-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-25
      相关资源
      最近更新 更多