资讯专栏INFORMATION COLUMN

laravel5.5 + jwt-auth 1.0.0-rc.2 多表多种用户认证规式

tangr206 / 1253人阅读

摘要:在下新建无效无效然后在的下添加自定义的跨域中间键在路由和下的构造函数调用。免责由于时间关系,没有在截图了,参考此文章的小伙伴自行进行测试下面例子源用了很多文档代码

安装
composer create-project --prefer-dist laravel/laravel sample "5.5.*"

安装依赖
composer install
安装jwt-auth
composer require tymon/jwt-auth

or
在composer.json中添加 `"tymon/jwt-auth": "^1.0.0-rc.2",`
终端:composer update

config/app.phpproviders

"providers" => [

    ...

    TymonJWTAuthProvidersLaravelServiceProvider::class,
]

终端运行:php artisan vendor:publish --provider="TymonJWTAuthProvidersLaravelServiceProvider"会产生config/jwt.php的配置文件

再运行:php artisan jwt:secret生成key

建Model

运行:

php artisan make:model Models/Admin -m
php artisan make:model Models/User -m

database/migrations下
迁移文件中

    **admins:**
Schema::create("admins", function (Blueprint $table) {
    $table->increments("id");
    $table->string("name");
    $table->string("email")->unique();
    $table->string("password");
    $table->string("avatar")->nullable();
    $table->timestamps();
});
    **users:**
Schema::create("users", function (Blueprint $table) {
    $table->increments("id");
    $table->string("name");
    $table->string("email")->unique();
    $table->string("password");
    $table->string("avatar")->nullable();
    $table->timestamps();
});

修改Model(USer和Admin是一样的)
getKey();
    }

    /**
     * Return a key value array, containing any custom claims to be added to the JWT.
     *
     * @return array
     */
    public function getJWTCustomClaims()
    {
        return [];
    }
}

config/auth.php中配置,找到对应的修改成自己的

"guards" => [

"web" => [
    "driver" => "session",
    "provider" => "users",
],

"api" => [
    "driver" => "jwt",
    "provider" => "users",
],

"admin" => [
    "driver" => "jwt",
    "provider" => "admins",
],

],

"providers" => [

"users" => [
    "driver" => "eloquent",
    "model" => AppModelsUser::class,
    "table" => "users",
],

"admins" => [
    "driver" => "eloquent",
    "model" => AppModelsAdmin::class,
    "table" => "admin_users"
],

],

路由

routes/api.php
Route::group([

"middleware" => "api",
"prefix" => "auth"

], function ($router) {

Route::post("login", "AuthController@login");
Route::post("logout", "AuthController@logout");
Route::post("refresh", "AuthController@refresh");
Route::post("me", "AuthController@me");

});

控制器(关键)

运行:php artisan make:controller AdminController创建控制器
注:此处主要是用了guard("admin")来区分要调用的表和Model这里是在auth.php中配置的

middleware("myauth", ["except" => ["login"]]);
    }

    /**
     * Get a JWT via given credentials.
     *
     * @return IlluminateHttpJsonResponse
     */
    public function login()
    {
        $credentials = request(["email", "password"]);

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

        return $this->respondWithToken($token);
    }

    /**
     * Get the authenticated User.
     *
     * @return IlluminateHttpJsonResponse
     */
    public function me()
    {
        return response()->guard("admin")->json(auth()->user());
    }

    /**
     * Log the user out (Invalidate the token).
     *
     * @return IlluminateHttpJsonResponse
     */
    public function logout()
    {
        auth()->guard("admin")->logout();

        return response()->json(["message" => "Successfully logged out"]);
    }

    /**
     * Refresh a token.
     *
     * @return IlluminateHttpJsonResponse
     */
    public function refresh()
    {
        return $this->respondWithToken(auth()->guard("admin")->refresh());
    }

    /**
     * Get the token array structure.
     *
     * @param  string $token
     *
     * @return IlluminateHttpJsonResponse
     */
    protected function respondWithToken($token)
    {
        return response()->json([
            "access_token" => $token,
            "token_type" => "bearer",
            "expires_in" => auth()->factory()->getTTL() * 60
        ]);
    }
}
中间键

由于使用了多表认证,所以不能使用jwt自带的中间键auth:api or jwt.auth,我自己建了一个中间键[myauth]来做路由验证。
在app/Http/Middleware下新建

namespace AppHttpMiddleware;

use Closure;
use IlluminateSupportFacadesAuth;

class AuthMiddleware {
    public function handle($request, Closure $next)
    {

        try {
            $user = auth()->guard("admin")->userOrFail();
            if(!$user) {
                return response()->json(["message" => "jwt 无效"], 401);
            }
        } catch (TymonJWTAuthExceptionsUserNotDefinedException $e) {
            return response()->json(["message" => "jwt 无效"], 401);
        }
        return $next($request);
    }
}

然后在app/Http/Kernel$routeMiddleware下添加
protected $routeMiddleware = [

    ...

    "cors" => AppHttpMiddlewareClientRequestCors::class, //自定义的跨域中间键
    "myauth" => AppHttpMiddlewareAuthMiddleware::class,

    ...

];

在路由和Controller下的构造函数调用。

免责

由于时间关系,没有在PostMan截图了,参考此文章的小伙伴自行进行测试
下面例子源用了很多jwt-auth文档代码

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

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

相关文章

  • laravel5.5+dingo+JWT开发后台API

    摘要:我的博客中文文档中使用辅助文章参考这篇文章基本就能搭建出环境,我使用的版本跟他一样,不知道别的版本有啥大的区别,但是网上找的其他一些文章使用的是旧的版本,封装的东西路径可能不一样,可能会保错,有些文档还说要手动添加和,其实新版本不需要。 我的github博客:https://zgxxx.github.io/ dingo api 中文文档: https://www.bookstack....

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

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

    AZmake 评论0 收藏0
  • laravel使用JWT做API认证

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

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

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

    xavier 评论0 收藏0
  • 学习 Lumen 用户认证 (二) —— 使用 jwt-auth 插件

    摘要:在开发中,用户认证是核心,是数据是否有保障的前提,目前主要有两种常用方式进行用户认证和。为了学习在中的使用,最好的办法就是在程序员同志网搜索有关插件,找个最多的那个拿来研究研究。 通过上一篇《学习 Lumen 用户认证 (一)》https://mp.weixin.qq.com/s/KVUQE2DUetNB2kqxHs0VDg的学习,大致懂了 Lumen 的用户认证主要使用 「api」的...

    姘存按 评论0 收藏0

发表评论

0条评论

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