>PHP 프레임워크 >Laravel >Laravel이 JWT를 사용하여 API 사용자 인증을 구현하는 세부 단계

Laravel이 JWT를 사용하여 API 사용자 인증을 구현하는 세부 단계

不言
不言앞으로
2019-01-01 09:34:3910531검색

이 글의 내용은 JWT를 사용하여 Laravel에서 API 사용자 인증을 구현하는 세부 단계에 대한 내용입니다. 필요한 친구들이 참고할 수 있기를 바랍니다.

1부 JWT 설치

1단계. 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 artisan Vendor:publish --provider="TymonJWTAuthProvidersLaravelServiceProvider"

4단계. 키 생성,

이 명령은 .env 파일에 JWT_SECRET=의 새 줄을 추가합니다. 비밀.
php artisan jwt:secret

두 번째 부분에서 구성이 시작됩니다

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단계. 사용자 모델을 변경하고, 第六步. 更改 User Model,
在User Model上实现TymonJWTAuthContractsJWTSubject接口,
实现getJWTIdentifier() and getJWTCustomClaims()两个方法。

<?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 [];
    }
}

第三部分 快速创建DEMO测试

第七步. 添加一些基本身份验证路由:

<?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');
});
第八步.
사용자 모델에 TymonJWTAuthContractsJWTSubject 인터페이스를 구현하고,


getJWTIdentifier() 및 getJWTCustomClaims() 두 가지 메서드를 구현합니다.

Laravel이 JWT를 사용하여 API 사용자 인증을 구현하는 세부 단계

<?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
        ]);
    }
}

3부 빠르게 DEMO 테스트 생성Laravel이 JWT를 사용하여 API 사용자 인증을 구현하는 세부 단계


7단계. 몇 가지 기본 인증 경로를 추가합니다.

rrreee

8단계. AuthController = > 컨트롤러 AuthController:

rrreee

9단계. Postman을 사용하여 API 테스트: Laravel이 JWT를 사용하여 API 사용자 인증을 구현하는 세부 단계


Laravel이 JWT를 사용하여 API 사용자 인증을 구현하는 세부 단계


🎜 API 데이터 획득을 테스트하려면 헤더에 토큰을 추가해야 합니다. 🎜🎜key =Authorization , 값=Bearer 공간 토큰 🎜🎜🎜🎜🎜토큰 새로 고침: 🎜🎜🎜🎜🎜🎜🎜🎜

위 내용은 Laravel이 JWT를 사용하여 API 사용자 인증을 구현하는 세부 단계의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 segmentfault.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제