Laravel 添加 jwt-auth

JWT 完整使用详解(中文)

https://laravel-china.org/articles/10885/full-use-of-jwt#45cd45

JWT 详解(英文)

https://jwt-auth.readthedocs.io/en/develop/laravel-installation/

创建 Laravel 工程

$  composer create-project laravel/laravel xyg 5.6 --prefer-dist

$  php artisan migrate       (创建数据库)

一、安装

1.  到官网 :https://github.com/tymondesigns/jwt-auth

查询 Laravel 不同版本对应的 jwt-auth 的不同版本号,使用以下安装命令

$  composer require tymon/jwt-auth 1.0.0-rc.2

config/app.php

...

'providers' => [

    ...

    Tymon\JWTAuth\Providers\LaravelServiceProvider::class,

]

...

'aliases' => [

    ...

    'JWTAuth' => Tymon\JWTAuth\Facades\JWTAuth::class,

]

2.  发布配置文件

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

3.  生成加密密钥   创建RegisterFormRequest

$  php artisan jwt:secret

$  php artisan make:request RegisterFormRequest

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class RegisterFormRequest extends FormRequest{

    public function authorize(){

      return true;

    }

    public function rules(){

      return [

          'name' => 'required|string|unique:users',

          'email' => 'required|email|unique:users',

          'password' => 'required|string|min:6|max:10',

      ];

    }

}

4.  修改 config/auth.php

'defaults' => [

    'guard' => 'api',  // 原来是 web 改成 api

    'passwords' => 'users',

],

'guards' => [

    'web' => [

        'driver' => 'session',

        'provider' => 'users',

    ],

    'api' => [

        'driver' => 'jwt',    // 原来是 token 改成 jwt

        'provider' => 'users',

    ],

],

5.  更新 app/User.php 

namespace App;

use Tymon\JWTAuth\Contracts\JWTSubject;

use Illuminate\Notifications\Notifiable;

use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable implements JWTSubject{

    use Notifiable;

    protected $fillable = [

        'name', 'email', //'password',

    ];

    protected $hidden = [

        'password', 'remember_token',

    ];

  public function getJWTIdentifier(){

    return $this->getKey();

  }

  public function getJWTCustomClaims(){

    return [];

  }

}

6.  创建 token 控制器,在 App\Http\Controllers 文件夹下增加了 AuthController

$  php artisan make:controller AuthController

namespace App\Http\Controllers;

use App\Http\Requests\RegisterFormRequest;

use Illuminate\Support\Facades\Auth;

use Tymon\JWTAuth\Facades\JWTAuth;

use Illuminate\Http\Request;

use App\User;

class AuthController extends Controller{

//RegisterFormRequest 是表单提交,postman选择Body -> x-www-form-urlencoded,输入参数

  public function register(RegisterFormRequest $request){

    $user = new User;

    $user->email = $request->email;

    $user->name = $request->name;

    $user->password = bcrypt($request->password);

    $user->save();

    return response([

        'status' => 'success',

        'data' => $user

    ], 200);

  }

  public function login(Request $request){

    $credentials = $request->only('email', 'password');

    if (!$token = JWTAuth::attempt($credentials)) {

      return response([

          'status' => 'error',

          'error' => 'invalid.credentials',

          'msg' => 'Invalid Credentials.'

      ], 400);

    }

    return response([

        'status' => 'success',

        'token' => $token

    ]);

  }

  public function user(Request $request){

    $user = User::find(Auth::user()->id);

    return response([

        'status' => 'success',

        'data' => $user

    ]);

  }

  /**

* Log out

* Invalidate the token, so user cannot use it anymore

* They have to relogin to get a new token

  * @param Request $request

*/

  public function logout(Request $request) {

    $this->validate($request, ['token' => 'required']);

    try {

      JWTAuth::invalidate($request->input('token'));

      return response([

          'status' => 'success',

          'msg' => 'You have successfully logged out.'

      ]);

    } catch (JWTException $e) {

      // something went wrong whilst attempting to encode the token

      return response([

          'status' => 'error',

          'msg' => 'Failed to logout, please try again.'

      ]);

    }

}

  public function refresh(){

    return response([

        'status' => 'success'

    ]);

  }

}

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

Route::post('signup', 'AuthController@register');

Route::post('login', 'AuthController@login');

Route::group(['prefix' => 'auth', 'middleware' => 'jwt.auth'], function () {

  Route::get('user', 'AuthController@user');

  Route::post('logout', 'AuthController@logout');

});

Route::middleware('jwt.refresh')->get('/token/refresh', 'AuthController@refresh');

二、使用

必须先注册才能登陆,直接在数据库添加数据无效,使用postman访问如下接口:

localhost:8888/public/api/signup      输入 name  email  password 三个参数

再访问,可以获取token

localhost:8888/public/api/login    输入 email  password 二个参数


搜索 jwt-auth laravel 5.6

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,830评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,992评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,875评论 0 331
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,837评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,734评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,091评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,550评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,217评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,368评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,298评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,350评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,027评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,623评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,706评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,940评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,349评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,936评论 2 341