旗下导航:搜·么
当前位置:网站首页 > PHP框架 > Laravel > 正文

Laravel运用JWT完成API用户受权的细致步骤【laravel框架】

作者:搜搜PHP网发布时间:2019-11-27分类:Laravel浏览:67


导读:本篇文章给人人带来的内容是关于Laravel运用JWT完成API用户受权的细致步骤,有肯定的参考价值,有须要的朋侪能够参考一下,愿望对你有所协助。第一部份装置JWT第...
本篇文章给人人带来的内容是关于Laravel运用JWT完成API用户受权的细致步骤,有肯定的参考价值,有须要的朋侪能够参考一下,愿望对你有所协助。

第一部份 装置JWT

第一步. 运用Composer装置 tymon/jwt-auth :

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

第二步. 增加效劳提供商(Laravel5.4及以下版本,5.5及以上版本无需增加),

将下面这行增加至 config/app.php 文件 providers 数组中:

<?php
// 文件:app.php
'providers' => [
    // other code
    Tymon\JWTAuth\Providers\LaravelServiceProvider::class,
]

第三步. 宣布设置文件,
运转以下敕令宣布 jwt-auth 的设置文件:

php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\LaravelServiceProvider"

第四步. 生成密钥,

此敕令会在你的 .env 文件中新增一行 JWT_SECRET=secret。
php artisan jwt:secret

第二部份 最先设置

第五步. 设置 Auth guard,`
在 config/auth.php 文件中,你须要将 guards/driver 更新为 jwt,
只要在运用 Laravel 5.2 及以上版本的情况下才运用。

<?php
    'defaults' => [
    'guard' => 'api',
    'passwords' => 'users',
],
// other code
'guards' => [
    'api' => [
        'driver' => 'jwt',
        'provider' => 'users',
    ],
],

第六步. 变动 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([
    'middleware' => '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');
});
第八步. 建立AuthController控制器 => php artisan 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
        ]);
    }
}

第九步. 运用Postman测试API:


测试API数据猎取,须要在headers中增加Token; 花样

key=Authorization,value=Bearer空格token

Token革新:

以上就是Laravel运用JWT完成API用户受权的细致步骤的细致内容,更多请关注ki4网别的相干文章!

标签:php