美文网首页
Laravel鉴权中间件JWT使用教程

Laravel鉴权中间件JWT使用教程

作者: 刀鱼要到岛上掉 | 来源:发表于2020-08-11 15:57 被阅读0次

一次JWT使用笔记

1.使用 composer 安装
composer require tymon/jwt-auth 1.*@rc
2.发布配置文件
# 这条命令会在 config 下增加一个 jwt.php 的配置文件
php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\LaravelServiceProvider"
3.更新你的模型
<?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;

    // 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 [];
    }
}
4. 修改 auth.php
'api' => [
    'driver' => 'jwt',
    "provider" => 'api',
],

...

'api' => [
    'driver' => 'eloquent',
    'model' => App\Models\Users\Api::class,//这里使用模型,也可以使用数据表 driver设为database table=>'表名'
],
5.控制器
<?php
use Tymon\JWTAuth\Facades\JWTAuth;
class AuthController extends ApiController
{
     public function __construct(){
         // 这里额外注意了:官方文档样例中只除外了『login』
        // 这样的结果是,token 只能在有效期以内进行刷新,过期无法刷新
        // 如果把 refresh 也放进去,token 即使过期但仍在刷新期以内也可刷新
        // 不过刷新一次作废
        $this->middleware('jwt.auth', ['except' => ['Login', 'Refresh']]);
        // 另外关于上面的中间件,官方文档写的是『auth:api』
        // 但是我推荐用 『jwt.auth』,效果是一样的,但是有更加丰富的报错信息返回
     }
     
     public function postAdmin(Request $request)
    {
        $user= $request->input('appid', '');
        $pwd= $request->input('secret', '');
        $credentials = ['appid'=>$user, 'password'=>$pwd];

        if (! $token = auth('apps')->attempt($credentials)) {
            return response()->json(['error' => 'Unauthorized'], 401);
        }

        return $this->respondWithToken($token);

    }
    
    public function postAdminRefresh()
    {
        try {
            return $this->output(200, '获取成功', [
                'access_token' => auth('apps')->refresh(),
                'token_type' => 'bearer',
                'expires_in' => JWTAuth::factory()->getTTL() * 60
            ]);
        } catch (\Exception $e) {
            Log::info('postRefresh:'.$e->getMessage().' line:'.$e->getLine());
            return $this->output(400, "获取失败");
        }
    }
    
     /**
     * Log the user out (Invalidate the token).
     *
     * @return \Illuminate\Http\JsonResponse
     */
    public function postLogout()
    {
        auth('api')->invalidate();

        return $this->output(200, '退出成功');
    }
    
    /**
     * Get the token array structure.
     *
     * @param  string $token
     *
     * @return \Illuminate\Http\JsonResponse
     */
    protected function respondWithToken($token)
    {
        
        return $this->output(200, '获取成功', [
            'access_token' => $token,
            'token_type' => 'bearer',
            'expires_in' => JWTAuth::factory()->getTTL() * 60
        ]);
    }
    
}


6.写路由
Route::group(['namespace' => 'Api',"middleware" => 'jwt.auth'], function () {
    //下面写你的路由
}

相关文章

  • Laravel鉴权中间件JWT使用教程

    一次JWT使用笔记 1.使用 composer 安装 2.发布配置文件 3.更新你的模型 4. 修改 auth.p...

  • JWT鉴权 Session鉴权

    JWT鉴权:image.png session鉴权:image.png

  • 09使用 Go 添加 JWT 认证

    介绍 jwt 实践定义功能签发接口验证中间件使用 总结 当前部分的代码 在典型的业务场景中, 认证与鉴权是十分基础...

  • Koa 使用 JWT 实现鉴权

    JWT 鉴权的优势 JWT (JSON Web Token) 是现今比较主流的的登录鉴权方式。token 类似一个...

  • JWT 鉴权

    使用 koa-jwt + jsonwebtoken 完成用户鉴权功能。项目地址:https://github.co...

  • 17 Go 鉴权(三):JWT

    Go 使用JWT鉴权 一、实现思路: 实现一个基于jwt-go包的JWT编解码工具 实现一个HTTP服务器编写登录...

  • Java web中使用JWT

    java-web 中使用 JWT 进行用户鉴权 环境参数 springboot --1.4.7-release s...

  • JWT 鉴权

    JWT 是什么 JSON Web Token(JWT)是一个开放式标准(RFC 7519),它定义了一种紧凑且自包...

  • jwt鉴权

    什么是JWT(Json web token): JWT是目前最流行的跨域认证解决方案。基于json的开放标准(R...

  • 前端鉴权和缓存相关收藏

    Auth2鉴权 JWT cookie-session 缓存相关

网友评论

      本文标题:Laravel鉴权中间件JWT使用教程

      本文链接:https://www.haomeiwen.com/subject/ydrydktx.html