laravel 使用JWT实现用户认证

在laravel使用Token进行用户认证
首先先安装拓展包php

composer require tymon/jwt-auth 0.5.*

而后在配置中注册laravel

Tymon\JWTAuth\Providers\JWTAuthServiceProvider::class
.....
'JWTAuth' => Tymon\JWTAuth\Facades\JWTAuth::class
'JWTFactory' => Tymon\JWTAuth\Facades\JWTFactory::class

发布配置文件生成密钥web

php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\JWTAuthServiceProvider"
php artisan jwt:generate

而后建立注册和登陆路由数据库

/routes/web.php

Route::post('/register', 'Auth\RegisterController@register');
Route::post('/login','Auth\LoginController@email');

去控制器建立注册用户方法json

app/Http/Controllers/Auth/RegisterController.php
protected function create(array $data){}
public function register(Request $request)
    {
        $this->validator($request->all())->validate();
        //验证的规则

        $user = $this->create($request->all());//存数据到数据库
        $token = JWTAuth::fromUser($user);
        //经过用户对象实例建立token
        return ["token" => $token]; }

接下来建立登陆的方法,这里我是用邮箱登陆app

app/Http/Controllers/Auth/LoginController.php

public function email(Request $request) {
        // grab credentials from the request
        $credentials = $request->only('email', 'password');

        try {
            // attempt to verify the credentials and create a token for the user
            if (! $token = JWTAuth::attempt($credentials)) {
                return response()->json(['error' => 'invalid_credentials'], 401);
            }
        } catch (JWTException $e) {
            // something went wrong whilst attempting to encode the token
            return response()->json(['error' => 'could_not_create_token'], 500);
        }

        // all good so return the token
        return response()->json(compact('token'));
    }

以后就会获得composer

{
“token”:”eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxIiwiaXNzIjoiaHR0cDpcL1wvbG9jYWx
ob3N0OjgwMDFcL2F1dGhcL2xvZ2luIiwiaWF0IjoxNDUxODg4MTE5LCJleHAiOjE0NTQ1MTYxMTksIm5iZiI6MTQ1MTg4OD
}ide

token能够设置Authorization头来使用:svg

Authorization: Bearer {yourtokenhere}post

也能够放进URL中使用

http://localhost:8001?token={yourtokenhere}

用户完成登陆注册以后就能够设置须要登陆后才能访问的路由,首先到

app/Http/Kernel.php

protected $routeMiddleware = [
    ...
    'jwt.auth' => 'Tymon\JWTAuth\Middleware\GetUserFromToken',
    'jwt.refresh' => 'Tymon\JWTAuth\Middleware\RefreshToken',
];

而后就是设置路由

routes/web.php

Route::group(['middleware' => 'jwt.auth', 'providers' => 'jwt'], function () {
    Route::post('/test', 'TestController@test');           
});

这样就表明在访问/test路由的时候须要带有token,登陆才能访问

而获取用户信息则能够在TestController中的test方法中采用

$user = JWTAuth::parseToken()->authenticate();//获取用户信息