资讯专栏INFORMATION COLUMN

Laravel使用JWT来创建用户认证API

zzbo / 2950人阅读

摘要:本文来自原文链接欢迎作客我们的学习群这个例子将引导你在中使用来创建用户登录和注册的。是的简称,可以帮助我们创建用户认证,以此连接前后端。

本文来自pilishen.com----原文链接; 欢迎作客我们的php&Laravel学习群:109256050

这个例子将引导你在laravel中使用JWT来创建用户登录和注册的API。JWTJson Web Token的简称,可以帮助我们创建用户认证,以此连接前后端。

(一)安装tymon/jwt-auth组件
composer require tymon/jwt-auth

修改config/app.php

"providers" => [
    ....
    "TymonJWTAuthProvidersJWTAuthServiceProvider",
],
"aliases" => [
    ....
    "JWTAuth" => "TymonJWTAuthFacadesJWTAuth"
],

发布JWT的配置文件,用以修改token过期时间等:

php artisan vendor:publish --provider="TymonJWTAuthProvidersJWTAuthServiceProvider"

生成jwt的秘钥:

php artisan jwt:generate
(二)创建api路由

app/Http/routes.php中(示例用的是laravel 5.2,你也可以放到后期版本的api.php中)

Route::group(["middleware" => ["api","cors"],"prefix" => "api"], function () {
    Route::post("register", "APIController@register");
    Route::post("login", "APIController@login");
    Route::group(["middleware" => "jwt-auth"], function () {
        Route::post("get_user_details", "APIController@get_user_details");
    });
});
(三)创建CORS Middleware

这里的cors中间件,这是用来解决跨域请求默认被拦截的问题,如果不加就会有下面这个常见报错:

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at //test.com/api/register. (Reason: CORS header "Access-Control-Allow-Origin" missing).

所以:

php artisan make:middleware CORS

然后在app/Http/Middleware/CORS.php中:

namespace AppHttpMiddleware;
use Closure;
class CORS
{
    public function handle($request, Closure $next)
    {
        header("Access-Control-Allow-Origin: *");
        
        $headers = [
            "Access-Control-Allow-Methods"=> "POST, GET, OPTIONS, PUT, DELETE",
            "Access-Control-Allow-Headers"=> "Content-Type, X-Auth-Token, Origin"
        ];
        if($request->getMethod() == "OPTIONS") {
            return Response::make("OK", 200, $headers);
        }
        
        $response = $next($request);
        foreach($headers as $key => $value)
            $response->header($key, $value);
        return $response;
    }
}

注册中间件app/Http/Kernel.php

namespace AppHttp;
use IlluminateFoundationHttpKernel as HttpKernel;
class Kernel extends HttpKernel
{
    ...
    ...
    protected $routeMiddleware = [
        ...
        "cors" => AppHttpMiddlewareCORS::class,
    ];
}
(四)创建jwt-auth Middleware
php artisan make:middleware authJWT

然后app/Http/Middleware/authJWT.php

namespace AppHttpMiddleware;
use Closure;
use JWTAuth;
use Exception;
class authJWT
{
    public function handle($request, Closure $next)
    {
        try {
            $user = JWTAuth::toUser($request->input("token"));
        } catch (Exception $e) {
            if ($e instanceof TymonJWTAuthExceptionsTokenInvalidException){
                return response()->json(["error"=>"Token is Invalid"]);
            }else if ($e instanceof TymonJWTAuthExceptionsTokenExpiredException){
                return response()->json(["error"=>"Token is Expired"]);
            }else{
                return response()->json(["error"=>"Something is wrong"]);
            }
        }
        return $next($request);
    }
}

然后app/Http/Kernel.php

namespace AppHttp;
use IlluminateFoundationHttpKernel as HttpKernel;
class Kernel extends HttpKernel
{
    ...
    ...
    protected $routeMiddleware = [
        ...
        "jwt-auth" => AppHttpMiddlewareauthJWT::class,
    ];
}
(五)创建相应的Controller

app/Http/Controllers/APIController.php中:

namespace AppHttpControllers;
use IlluminateHttpRequest;
use AppUser;
use Hash;
use JWTAuth;
class APIController extends Controller
{
    
    public function register(Request $request)
    {        
        $input = $request->all();
        $input["password"] = Hash::make($input["password"]);
        User::create($input);
        return response()->json(["result"=>true]);
    }
    
    public function login(Request $request)
    {
        $input = $request->all();
        if (!$token = JWTAuth::attempt($input)) {
            return response()->json(["result" => "wrong email or password."]);
        }
            return response()->json(["result" => $token]);
    }
    
    public function get_user_details(Request $request)
    {
        $input = $request->all();
        $user = JWTAuth::toUser($input["token"]);
        return response()->json(["result" => $user]);
    }
    
}
(六)前端测试API

这里你完全可以使用postman或者rest client等其他工具。

测试Register API:

$.ajax({
    url: "//learnl52.hd/api/register",
    dataType: "json",
    type: "POST",
    data: {"name":"HD","email":"test@gmail.com","password":"123456"},
    success: function (data) {
        alert("user created successfully")
    }
});

测试Login API:

$.ajax({
    url: "//learnl52.hd/api/login",
    dataType: "json",
    type: "POST",
    data: {"email":"test@gmail.com","password":"123456"},
    success: function (data) {
        alert(data.result)
    }
});

测试User Details API(这里的token是你Login api返回的token)

$.ajax({
    url: "//learnl52.hd/api/get_user_details",
    dataType: "json",
    type: "POST",
    data: {"token":your toke here},
    success: function (data) {
        console.log(data)
    }
});

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

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

相关文章

  • Lumen用户认证JWT,源码解读

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

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

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

    xavier 评论0 收藏0
  • Laravel从零开发后台API(二)

    摘要:之前我们已经准备好了基本的安装过程现在我们去实现一下具体的业务部分用户的登录与注册对于用户注册这对于一款应用来说再正常不过了为了接下来我们的效果我们可以去生成一个即在项目终端执行生成用户之后我们暂时先不去编辑字段后面我们需要用到时再加返回字 之前我们已经准备好了基本的安装过程 现在我们去实现一下具体的业务部分 用户的登录与注册 对于用户注册 这对于一款应用来说再正常不过了 为了接下来...

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

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

    王伟廷 评论0 收藏0
  • laravel使用JWTAPI认证

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

    SexySix 评论0 收藏0

发表评论

0条评论

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