laravel 使用JWT实现用户认证

来源:互联网 发布:室内效果图制作软件 编辑:程序博客网 时间:2024/06/06 01:53

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

composer require tymon/jwt-auth 0.5.*

然后在配置中注册

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

发布配置文件生成密钥

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

然后创建注册和登录路由

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

去控制器创建注册用户方法

app/Http/Controllers/Auth/RegisterController.phpprotected 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/Http/Controllers/Auth/LoginController.phppublic 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'));    }

之后就会得到

{
“token”:”eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxIiwiaXNzIjoiaHR0cDpcL1wvbG9jYWx
ob3N0OjgwMDFcL2F1dGhcL2xvZ2luIiwiaWF0IjoxNDUxODg4MTE5LCJleHAiOjE0NTQ1MTYxMTksIm5iZiI6MTQ1MTg4OD
}

token可以设置Authorization头来使用:

Authorization: Bearer {yourtokenhere}

也可以放进URL中使用

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

用户完成登录注册之后就可以设置需要登录后才能访问的路由,首先到

app/Http/Kernel.phpprotected $routeMiddleware = [    ...    'jwt.auth' => 'Tymon\JWTAuth\Middleware\GetUserFromToken',    'jwt.refresh' => 'Tymon\JWTAuth\Middleware\RefreshToken',];

然后就是设置路由

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

这样就代表在访问/test路由的时候需要带有token,登录才能访问

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

$user = JWTAuth::parseToken()->authenticate();//获取用户信息
阅读全文
0 0
原创粉丝点击