web-dev-qa-db-ja.com

Laravel Passport Print Personal Access Token

私は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>

これを解決するのを手伝ってください。

ありがとうございました

11
Minion

次のコードを試すことができます:

    $user->tokens->load('client')->filter(function ($token) {
        return ! $token->client->firstParty() && ! $token->revoked;
    })->values();
2
Denis Kovacevic

ユーザーを作成する前に、または同時にトークンを生成してデータベースに格納するだけでよいと思います。

列を追加します。

$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;
2
Serg Chernata

私はlaravel&vue js iiで同様の問題に直面していますヘルプ ApacheとVueを使用したLaravel Passport 401 Unauthorized Error

2
channasmcs

私も同じ問題を抱えていましたが、クライアントが使用する必要があるトークンをフェッチするのが非常に難しいのは奇妙でした。また、トークンをデータベースに保存するのはおかしいと感じ、データを複製していると思っていました。

だから多くの研究の後に私は特性を微調整しました、そして私は今それを正確に持つことができます。

チェック this Gist それはあなたの問題も解決するかもしれません。

0
George D.

これが私の解決策でした。

クライアントをインストールし、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(),
    ];
}
0
Vince Lowe

私も同じ問題に直面しています。そして、ここで laravelのドキュメント に記述されているコマンドで解決しました。 phpプロジェクトに行き、パスポートのクライアントを作成し、ターミナルまたはcmdを開いて、php artisan passport:installコマンドを実行します。

0
Ziaur Rahman