资讯专栏INFORMATION COLUMN

laravel使用JWT做API认证

SexySix / 2403人阅读

摘要:最近项目做认证,最终技术选型决定使用,项目框架使用的是,使用有比较方便使用的开源包。使用安装,使用的框架版本为,最新稳定版本为。

最近项目做API认证,最终技术选型决定使用JWT,项目框架使用的是laravel,laravel使用JWT有比较方便使用的开源包:jwt-auth。
使用composer安装jwt-auth,laravel使用的框架版本为5.0,jwt-auth最新稳定版本为0.5.12。(最新版为1.0.*,需laravel5.4以上)
composer require tymon/jwt-auth 0.5.*
安装完成后,需要在config/app.php中注册相应的服务提供者:
"providers" => [
    "TymonJWTAuthProvidersJWTAuthServiceProvider",
],
然后注册需要用到的对应门面:
"aliases" => [
    "JWTAuth"   => "TymonJWTAuthFacadesJWTAuth",
    "JWTFactory" => "TymonJWTAuthFacadesJWTFactory",
],
然后发布相应配置文件:此命令会在 config 目录下生成一个 jwt.php 配置文件,你可以在此进行自定义配置。
php artisan vendor:publish --provider="TymonJWTAuthProvidersJWTAuthServiceProvider"
最后生成密钥:此命令会在你的 .env 文件中新增一行 JWT_SECRET=secret
php artisan jwt:generate

生成TOKEN,生成TOKEN有多种方式:下面介绍两种
一、根据模型为基础生成TOKEN:

根据模型生成TOKEN需在config/auth.php指定使用哪个模型。
    "model" => "AppModelsMembers",
在模型文件Members.php中需添加
namespace AppModels;

use IlluminateDatabaseEloquentModel;
use IlluminateAuthAuthenticatable;
use IlluminateContractsAuthAuthenticatable as AuthenticatableContract;

class Members extends Model implements AuthenticatableContract
{
    use Authenticatable;
    ...
}
根据模型生成TOKEN
$member = AppModelsMembers::where("id",7)->select("id","username")->first();
$token = JWTAuth::fromUser($member);
echo $token;exit;

二、自定义生成TOKEN:

$customClaims = ["sub" => [
    "id" => "7",
    "name" => "kocor",
]];
$payload = JWTFactory::make($customClaims);
$token = JWTAuth::encode($payload);
echo $token;exit;

解密提取TOKEN信息

提取TOKEN信息
$user_info = JWTAuth::parseToken()->authenticate()
刷新TOKEN
$newToken = JWTAuth::refresh($_REQUEST["token"]);
使用实例
        
use TymonJWTAuthExceptionsJWTException;
use TymonJWTAuthExceptionsTokenExpiredException;
use TymonJWTAuthExceptionsTokenInvalidException;


//JWT提取会员信息
try {
    if (! $user_info = JWTAuth::parseToken()->authenticate()) {
        return Api::arr(config("statusCode.jwt_user_not_found"), trans("message.jwt_user_not_found").":404");
    }
    //在token有效期内允许刷新
    $newToken = JWTAuth::refresh($_REQUEST["token"]);
    return Api::json(config("statusCode.success"), trans("message.success"),$newToken);
} catch (TokenExpiredException $e) {
    try {
        //在刷新有效期内
        $newToken = JWTAuth::refresh($_REQUEST["token"]);
        return Api::json(config("statusCode.success"), trans("message.success"),$newToken);
    } catch (JWTException $e) {
        // 过期用户
        return Api::json(config("statusCode.jwt_token_expired"), trans("message.jwt_token_expired").$e->getStatusCode());
    }
//无效的token
} catch (TokenInvalidException $e) {
    return Api::json(config("statusCode.jwt_token_invalid"), trans("message.jwt_token_invalid").$e->getStatusCode());
//token不存在
} catch (JWTException $e) {
    return Api::json(config("statusCode.jwt_token_absent"), trans("message.jwt_token_absent").$e->getStatusCode());
}    

by kocor

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/30865.html

相关文章

  • Laravel 5.5 使用 Jwt-Auth 实现 API 用户认证以及无痛刷新访问令牌

    摘要:默认的时间为周。大概意思就是如果用户有一个,那么他可以带着他的过来领取新的,直到周的时间后,他便无法继续刷新了,需要重新登录。指定在刷新令牌时要保留的声明密钥。为了使令牌无效,您必须启用黑名单。指定用于对用户进行身份验证的提供程序。 showImg(https://segmentfault.com/img/remote/1460000012606251?w=1920&h=1280); ...

    xavier 评论0 收藏0
  • Lumen用户认证JWT,源码解读

    摘要:如何做用户认证根据文档描述,提供用户认证的接口,他的核心是看守器和提供器,看守器定义怎么认证用户,提供器定义怎么检索用户。 最近的一个PHP项目,上一个项目是采用ThinkPHP来弄的,因为很早就听说过Laravel的大名,所以进了Laravel的官网,意外发现了Lumen,正好我项目是提供API的,所以选择了Lumen,因为是Laravel的精简版,看了几天的Laravel文档,也总...

    AZmake 评论0 收藏0
  • Laravel核心解读 -- 扩展用户认证系统

    摘要:扩展用户认证系统上一节我们介绍了系统实现的一些细节知道了是如何应用看守器和用户提供器来进行用户认证的,但是针对我们自己开发的项目或多或少地我们都会需要在自带的看守器和用户提供器基础之上做一些定制化来适应项目,本节我会列举一个在做项目时遇到的 扩展用户认证系统 上一节我们介绍了Laravel Auth系统实现的一些细节知道了Laravel是如何应用看守器和用户提供器来进行用户认证的,但是...

    王伟廷 评论0 收藏0
  • Laravel使用JWT来创建用户认证API

    摘要:本文来自原文链接欢迎作客我们的学习群这个例子将引导你在中使用来创建用户登录和注册的。是的简称,可以帮助我们创建用户认证,以此连接前后端。 本文来自pilishen.com----原文链接; 欢迎作客我们的php&Laravel学习群:109256050 这个例子将引导你在laravel中使用JWT来创建用户登录和注册的API。JWT是Json Web Token的简称,可以帮助我们创建...

    zzbo 评论0 收藏0
  • 使用 TDD 测试驱动开发来构建 Laravel REST API

    摘要:以及敏捷开发的先驱者之一的有句名言如果你没有进行测试驱动开发,那么你应该正在做开发后堵漏的事今天我们将进行一场基于的测试驱动开发之旅。使用生成测试类。现在使用命令来生成模型并将其添加到我们的模型中。 showImg(https://segmentfault.com/img/remote/1460000018404936?w=1440&h=900); TDD 以及敏捷开发的先驱者之一的 ...

    AlphaWallet 评论0 收藏0

发表评论

0条评论

SexySix

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<