私はLaravelのパスポートパッケージを使用して、残りのAPIにトークンベースの認証を提供しています。現在、私は 個人アクセストークン コンセプトを使用してアクセストークンを生成しています。
単一のユーザーのアクセストークンを生成するには、以下のコードを使用して、「Android」という名前のトークンを生成します。
$user = User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => bcrypt($data['password']),
]);
// Here the access token will be stored in $token variable.
$token = $user->createToken('Android')->accessToken;
// Now the $token value would be something like
//eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6ImMyNjI3YzU0YjFhNWIxZTFlMTdkODhmZTk1NzhjNzAzY2QyMTU0MzhlOD...
後で、パーソナルアクセストークンを管理ダッシュボードに表示したいのですが、生成されたトークンを再度取得することが困難です。コードの下で試してみましたが、アクセストークンを取得できませんでした。
$user = User::find(1)
dd($user->tokens())
また、パスポートvue要素を使用してみましたが、実際のトークンではなく、アクセストークン名のみが表示されています。
<passport-personal-access-tokens></passport-personal-access-tokens>
これを解決するのを手伝ってください。
ありがとうございました
次のコードを試すことができます:
$user->tokens->load('client')->filter(function ($token) {
return ! $token->client->firstParty() && ! $token->revoked;
})->values();
ユーザーを作成する前に、または同時にトークンを生成してデータベースに格納するだけでよいと思います。
列を追加します。
$table->string('token', 60)->unique();
トークンを保存します。
$token = $user->createToken('Android')->accessToken;
$user = User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => bcrypt($data['password']),
'token' => $token,
]);
その後、次のように利用できます。
$user->token;
私はlaravel&vue js iiで同様の問題に直面していますヘルプ ApacheとVueを使用したLaravel Passport 401 Unauthorized Error
私も同じ問題を抱えていましたが、クライアントが使用する必要があるトークンをフェッチするのが非常に難しいのは奇妙でした。また、トークンをデータベースに保存するのはおかしいと感じ、データを複製していると思っていました。
だから多くの研究の後に私は特性を微調整しました、そして私は今それを正確に持つことができます。
チェック this Gist それはあなたの問題も解決するかもしれません。
これが私の解決策でした。
クライアントをインストールし、oauth_access_tokensテーブルの名前列をロングテキストに変更するようにパスポートの移行の構成を作成したので、これを使用してアクセストークンを格納できます。
public function up()
{
/*
* This command will create the encryption keys needed to generate secure access tokens.
* In addition, the command will create "personal access" and "password grant"
* clients which will be used to generate access tokens
*/
Artisan::call( 'passport:install', array('-n' => true) );
// Set the type to LONGTEXT so we can store the access token in it
Schema::table( 'oauth_access_tokens', function ($table) {
$table->string( 'name', 4294967295 )->change();
});
}
次に、次のメソッドをユーザーモデルに追加しました。
/**
* Get the users api access token.
*/
public function getAccessToken() {
$existingToken = $this->tokens()->where( 'revoked', false )->first();
if ( $existingToken ) {
return $existingToken->name;
}
$accessToken = $this->createToken( $this->uuid )->accessToken;
// save the access_token so we can recycle it.
$this->tokens()->where( 'revoked', false )->update( [
'name' => $accessToken,
] );
return $accessToken;
}
次に、トランスフォーマーでそれを呼び出して、ユーザーアクセストークンを取得するか、トークンを作成します。
/**
* A Fractal transformer.
*
* @param User $user
* @return array
*/
public function transform(User $user) {
return [
'access_token' => $user->getAccessToken(),
];
}
私も同じ問題に直面しています。そして、ここで laravelのドキュメント に記述されているコマンドで解決しました。 phpプロジェクトに行き、パスポートのクライアントを作成し、ターミナルまたはcmdを開いて、php artisan passport:install
コマンドを実行します。