Laravel实现JWT登录

1、使用composer安装

#使用1.0以上版本
composer require tymon/jwt-auth 1.*@rc

2、进行一些配置(Laravel5.4及以下版本,5.5及以上版本无需添加)
将下面这行添加至 config/app.php 文件 providers 数组中:

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

3、发布配置文件

# 这条命令会在 config 下增加一个 jwt.php 的配置文件
php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\LaravelServiceProvider"

4、生成加密密钥

php artisan jwt:secret

5、更改 User Model(增加下面两个方法)


image.png

6、注册两个 Facade
这两个 Facade 不是必须的,但是使用它们会给你的代码编写带来一点便利。
config/app.php

#
'aliases' => [
        ...
        // 添加以下两行
       'JWTAuth' => Tymon\JWTAuth\Facades\JWTAuth::class,
       'JWTFactory' => Tymon\JWTAuth\Facades\JWTFactory::class,
],

如果你不使用这两个 Facade,你可以使用辅助函数 auth ()
auth () 是一个辅助函数,返回一个 guard,暂时可以看成 Auth Facade。

// 如果不用 Facade,你可以这么写
auth('api')->refresh();
// 用 JWTAuth Facade
JWTAuth::parseToken()->refresh();

7、修改 auth.php
config/auth.php

'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],

    'api' => [
        'driver' => 'jwt',      // 原来是 token 改成jwt
        'provider' => 'users',
    ],
],

8、注册一些路由
注意:在 Laravel 下,route/api.php 中的路由默认都有前缀 api 。

Route::post('login', 'AuthController@login');
Route::middleware("auth:api")->group(function () {
    Route::post('logout', 'AuthController@logout');
    Route::post('refresh', 'AuthController@refresh');
    Route::get('me', 'AuthController@me');
});

9、创建 token 控制器

php artisan make:controller AuthController

AuthController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class AuthController extends Controller
{
    protected function respondWithToken($token)
    {
        return response()->json([
            'access_token' => $token,
            'token_type' => 'bearer',
            'expires_in' => auth('api')->factory()->getTTL() * 60
        ]);
    }

    public function login(){

        $data = request(['name','password']);
        // dd($data);
        if($token = auth('api')->attempt($data)){

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

        return response()->json(['error'=>'Unauthorized'],401);
    }

    public function me()
    {
        // dd(11);
        return response()->json(auth('api')->user());
    }

    public function logout(){

        $data = auth('api')->logout();

        return response()->json(['msg'=>'success','data'=>$data]);
    }
}

10、token 的获取、使用、删除
获取token


image.png

使用token


image.png

删除token
image.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容