成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Laravel使用JWT來創(chuàng)建用戶認(rèn)證API

zzbo / 3099人閱讀

摘要:本文來自原文鏈接歡迎作客我們的學(xué)習(xí)群這個例子將引導(dǎo)你在中使用來創(chuàng)建用戶登錄和注冊的。是的簡稱,可以幫助我們創(chuàng)建用戶認(rèn)證,以此連接前后端。

本文來自pilishen.com----原文鏈接; 歡迎作客我們的php&Laravel學(xué)習(xí)群:109256050

這個例子將引導(dǎo)你在laravel中使用JWT來創(chuàng)建用戶登錄和注冊的API。JWTJson Web Token的簡稱,可以幫助我們創(chuàng)建用戶認(rèn)證,以此連接前后端。

(一)安裝tymon/jwt-auth組件
composer require tymon/jwt-auth

修改config/app.php

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

發(fā)布JWT的配置文件,用以修改token過期時(shí)間等:

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

生成jwt的秘鑰:

php artisan jwt:generate
(二)創(chuàng)建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");
    });
});
(三)創(chuàng)建CORS Middleware

這里的cors中間件,這是用來解決跨域請求默認(rèn)被攔截的問題,如果不加就會有下面這個常見報(bào)錯:

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,
    ];
}
(四)創(chuàng)建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,
    ];
}
(五)創(chuàng)建相應(yīng)的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: "http://learnl52.hd/api/register",
    dataType: "json",
    type: "POST",
    data: {"name":"HD","email":"[email protected]","password":"123456"},
    success: function (data) {
        alert("user created successfully")
    }
});

測試Login API:

$.ajax({
    url: "http://learnl52.hd/api/login",
    dataType: "json",
    type: "POST",
    data: {"email":"[email protected]","password":"123456"},
    success: function (data) {
        alert(data.result)
    }
});

測試User Details API(這里的token是你Login api返回的token)

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

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/28354.html

相關(guān)文章

  • Lumen用戶認(rèn)證JWT,源碼解讀

    摘要:如何做用戶認(rèn)證根據(jù)文檔描述,提供用戶認(rèn)證的接口,他的核心是看守器和提供器,看守器定義怎么認(rèn)證用戶,提供器定義怎么檢索用戶。 最近的一個PHP項(xiàng)目,上一個項(xiàng)目是采用ThinkPHP來弄的,因?yàn)楹茉缇吐犝f過Laravel的大名,所以進(jìn)了Laravel的官網(wǎng),意外發(fā)現(xiàn)了Lumen,正好我項(xiàng)目是提供API的,所以選擇了Lumen,因?yàn)槭荓aravel的精簡版,看了幾天的Laravel文檔,也總...

    AZmake 評論0 收藏0
  • Laravel 5.5 使用 Jwt-Auth 實(shí)現(xiàn) API 用戶認(rèn)證以及無痛刷新訪問令牌

    摘要:默認(rèn)的時(shí)間為周。大概意思就是如果用戶有一個,那么他可以帶著他的過來領(lǐng)取新的,直到周的時(shí)間后,他便無法繼續(xù)刷新了,需要重新登錄。指定在刷新令牌時(shí)要保留的聲明密鑰。為了使令牌無效,您必須啟用黑名單。指定用于對用戶進(jìn)行身份驗(yàn)證的提供程序。 showImg(https://segmentfault.com/img/remote/1460000012606251?w=1920&h=1280); ...

    xavier 評論0 收藏0
  • Laravel從零開發(fā)后臺API(二)

    摘要:之前我們已經(jīng)準(zhǔn)備好了基本的安裝過程現(xiàn)在我們?nèi)?shí)現(xiàn)一下具體的業(yè)務(wù)部分用戶的登錄與注冊對于用戶注冊這對于一款應(yīng)用來說再正常不過了為了接下來我們的效果我們可以去生成一個即在項(xiàng)目終端執(zhí)行生成用戶之后我們暫時(shí)先不去編輯字段后面我們需要用到時(shí)再加返回字 之前我們已經(jīng)準(zhǔn)備好了基本的安裝過程 現(xiàn)在我們?nèi)?shí)現(xiàn)一下具體的業(yè)務(wù)部分 用戶的登錄與注冊 對于用戶注冊 這對于一款應(yīng)用來說再正常不過了 為了接下來...

    Nekron 評論0 收藏0
  • Laravel核心解讀 -- 擴(kuò)展用戶認(rèn)證系統(tǒng)

    摘要:擴(kuò)展用戶認(rèn)證系統(tǒng)上一節(jié)我們介紹了系統(tǒng)實(shí)現(xiàn)的一些細(xì)節(jié)知道了是如何應(yīng)用看守器和用戶提供器來進(jìn)行用戶認(rèn)證的,但是針對我們自己開發(fā)的項(xiàng)目或多或少地我們都會需要在自帶的看守器和用戶提供器基礎(chǔ)之上做一些定制化來適應(yīng)項(xiàng)目,本節(jié)我會列舉一個在做項(xiàng)目時(shí)遇到的 擴(kuò)展用戶認(rèn)證系統(tǒng) 上一節(jié)我們介紹了Laravel Auth系統(tǒng)實(shí)現(xiàn)的一些細(xì)節(jié)知道了Laravel是如何應(yīng)用看守器和用戶提供器來進(jìn)行用戶認(rèn)證的,但是...

    王偉廷 評論0 收藏0
  • laravel使用JWTAPI認(rèn)證

    摘要:最近項(xiàng)目做認(rèn)證,最終技術(shù)選型決定使用,項(xiàng)目框架使用的是,使用有比較方便使用的開源包。使用安裝,使用的框架版本為,最新穩(wěn)定版本為。 最近項(xiàng)目做API認(rèn)證,最終技術(shù)選型決定使用JWT,項(xiàng)目框架使用的是laravel,laravel使用JWT有比較方便使用的開源包:jwt-auth。 使用composer安裝jwt-auth,laravel使用的框架版本為5.0,jwt-auth最新穩(wěn)定版本...

    SexySix 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<