ホームページ > PHPフレームワーク > Laravel > Laravel が JWT を使用して API ユーザー認証を実装するための詳細な手順

Laravel が JWT を使用して API ユーザー認証を実装するための詳細な手順

不言
リリース: 2019-01-01 09:34:39
転載
10545 人が閲覧しました

この記事の内容は、Laravel を使用して API ユーザー認証を実装するための詳細な手順に関するもので、必要な方は参考にしていただければ幸いです。

パート 1 JWT のインストール

最初のステップ。Composer を使用して tymon/jwt-auth をインストールします。

`composer require tymon/ jwt -auth 1.0.0-rc.3

ステップ 2. サービスプロバイダーを追加します (Laravel 5.4 以前。5.5 以降を追加する必要はありません)。

次の行を追加します。 config/app.php ファイルのプロバイダー配列:

<?php // 文件:app.php
&#39;providers&#39; => [
    // other code
    Tymon\JWTAuth\Providers\LaravelServiceProvider::class,
]
ログイン後にコピー

ステップ 3. 構成ファイルを公開します。
次のコマンドを実行して、jwt-auth 構成ファイルを公開します。

php 職人ベンダー:publish --provider="Tymon\JWTAuth\Providers\LaravelServiceProvider"

ステップ 4. キーを生成します。

このコマンドは、.env に新しい行を追加します。ファイル JWT_SECRET=秘密。
php professional jwt:secret

2 番目の部分では構成が開始されます

5 番目のステップでは、`
config/ で認証ガードを構成します。 auth .php ファイルを使用するには、ガード/ドライバーを jwt に更新する必要があります。
これは、Laravel 5.2 以降を使用している場合にのみ使用できます。

<?php     &#39;defaults&#39; => [
    'guard' => 'api',
    'passwords' => 'users',
],
// other code
'guards' => [
    'api' => [
        'driver' => 'jwt',
        'provider' => 'users',
    ],
],
ログイン後にコピー

ステップ 6. ユーザー モデルを変更します。
ユーザー モデルに TymonJWTAuthContractsJWTSubject インターフェイスを実装します。
getJWTIdentifier() と getJWTCustomClaims() の 2 つのメソッドを実装します。

<?php namespace App;

use Tymon\JWTAuth\Contracts\JWTSubject;

class User extends Authenticatable implements JWTSubject
{
    // other code

    // Rest omitted for brevity
    
    /**
     * Get the identifier that will be stored in the subject claim of the JWT.
     *
     * @return mixed
     */
    public function getJWTIdentifier()
    {
        return $this->getKey();
    }

    /**
     * Return a key value array, containing any custom claims to be added to the JWT.
     *
     * @return array
     */
    public function getJWTCustomClaims()
    {
        return [];
    }
}
ログイン後にコピー

パート 3 デモ テストを簡単に作成する

ステップ 7. 基本認証ルートを追加します:

<?php Route::group([
    &#39;middleware&#39; => 'api',
    'prefix' => 'auth'
], function ($router) {
    Route::post('login', 'AuthController@login');
    Route::post('register', 'AuthController@register');
    Route::post('logout', 'AuthController@logout');
    Route::post('refresh', 'AuthController@refresh');
    Route::post('me', 'AuthController@me');
});
ログイン後にコピー
ステップ 8. AuthController コントローラーの作成=> php 職人 make:controller AuthController:
<?php namespace App\Http\Controllers;

use App\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;

class AuthController extends Controller
{
    /**
     * Create a new AuthController instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('auth:api', ['except' => ['login', 'register']]);
    }

    /**
     * 用户使用邮箱密码获取JWT Token.
     *
     * @return \Illuminate\Http\JsonResponse
     */
    public function login()
    {
        $credentials = request(['email', 'password']);

        if (! $token = auth()->attempt($credentials)) {
            return response()->json(['error' => 'Unauthorized'], 401);
        }

        return $this->respondWithToken($token);
    }

    /**
     * 注册新用户
     */
    public function register(Request $request)
    {
        // 数据校验
        // 数据验证
        $validator = Validator::make($request->all(), [
            'name'       => 'required',
            'email'      => 'required|email',
            'password'   => 'required',
            'c_password' => 'required|same:password'
        ]);

        if ($validator->fails()) {
            return response()->json(['error'=>$validator->errors()], 401);
        }

        // 读取参数并保存数据
        $input = $request->all();
        $input['password'] = bcrypt($input['password']);
        $user = User::create($input);

        // 创建Token并返回
        return $user;
    }

    /**
     * 获取经过身份验证的用户.
     *
     * @return \Illuminate\Http\JsonResponse
     */
    public function me()
    {
        return response()->json(auth()->user());
    }

    /**
     * 刷新Token.
     *
     * @return \Illuminate\Http\JsonResponse
     */
    public function refresh()
    {
        return $this->respondWithToken(auth()->refresh());
    }


    /**
     * Get the token array structure.
     *
     * @param  string $token
     *
     * @return \Illuminate\Http\JsonResponse
     */
    protected function respondWithToken($token)
    {
        return response()->json([
            'access_token' => $token,
            'token_type' => 'bearer',
            'expires_in' => auth()->factory()->getTTL() * 60
        ]);
    }
}
ログイン後にコピー

ステップ 9. Postman を使用して API をテストします。

Laravel が JWT を使用して API ユーザー認証を実装するための詳細な手順

Laravel が JWT を使用して API ユーザー認証を実装するための詳細な手順


API データ取得をテストするには、ヘッダー形式にトークンを追加する必要があります。

key=認可、値=ベアラースペーストークン

Laravel が JWT を使用して API ユーザー認証を実装するための詳細な手順

トークン更新:


Laravel が JWT を使用して API ユーザー認証を実装するための詳細な手順


以上がLaravel が JWT を使用して API ユーザー認証を実装するための詳細な手順の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
php
ソース:segmentfault.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート