资讯专栏INFORMATION COLUMN

Laravel使用JWT实现API用户授权

kid143 / 3197人阅读

摘要:第二部分开始配置第五步配置,在文件中,你需要将更新为,只有在使用及以上版本的情况下才能使用。第六步更改,在上实现接口,实现两个方法。

第一部分 安装JWT
第一步. 使用Composer安装 tymon/jwt-auth :
`composer require tymon/jwt-auth 1.0.0-rc.3
第二步. 添加服务提供商(Laravel5.4及以下版本,5.5及以上版本无需添加),
将下面这行添加至 config/app.php 文件 providers 数组中:
 [
    // other code
    TymonJWTAuthProvidersLaravelServiceProvider::class,
]
第三步. 发布配置文件,
运行如下命令发布 jwt-auth 的配置文件:
php artisan vendor:publish --provider="TymonJWTAuthProvidersLaravelServiceProvider"
第四步. 生成密钥,
此命令会在你的 .env 文件中新增一行 JWT_SECRET=secret。
php artisan jwt:secret
第二部分 开始配置
第五步. 配置 Auth guard,`
在 config/auth.php 文件中,你需要将 guards/driver 更新为 jwt,
只有在使用 Laravel 5.2 及以上版本的情况下才能使用。
 [
    "guard" => "api",
    "passwords" => "users",
],
// other code
"guards" => [
    "api" => [
        "driver" => "jwt",
        "provider" => "users",
    ],
],
第六步. 更改 User Model,
在User Model上实现TymonJWTAuthContractsJWTSubject接口,
实现getJWTIdentifier() and getJWTCustomClaims()两个方法。
getKey();
    }

    /**
     * Return a key value array, containing any custom claims to be added to the JWT.
     *
     * @return array
     */
    public function getJWTCustomClaims()
    {
        return [];
    }
}
第三部分 快速创建DEMO测试
第七步. 添加一些基本身份验证路由:
 "api",
    "prefix" => "auth"
], function ($router) {
    Route::post("login", "AuthController@login");
    Route::post("register", "AuthController@register");
    Route::post("logout", "AuthController@logout");
    Route::post("refresh", "AuthController@refresh");
    Route::post("me", "AuthController@me");
});
第八步. 创建AuthController控制器 => php artisan make:controller AuthController:
middleware("auth:api", ["except" => ["login", "register"]]);
    }

    /**
     * 用户使用邮箱密码获取JWT Token.
     *
     * @return IlluminateHttpJsonResponse
     */
    public function login()
    {
        $credentials = request(["email", "password"]);

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

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

    /**
     * 注册新用户
     */
    public function register(Request $request)
    {
        // 数据校验
        // 数据验证
        $validator = Validator::make($request->all(), [
            "name"       => "required",
            "email"      => "required|email",
            "password"   => "required",
            "c_password" => "required|same:password"
        ]);

        if ($validator->fails()) {
            return response()->json(["error"=>$validator->errors()], 401);
        }

        // 读取参数并保存数据
        $input = $request->all();
        $input["password"] = bcrypt($input["password"]);
        $user = User::create($input);

        // 创建Token并返回
        return $user;
    }

    /**
     * 获取经过身份验证的用户.
     *
     * @return IlluminateHttpJsonResponse
     */
    public function me()
    {
        return response()->json(auth()->user());
    }

    /**
     * 刷新Token.
     *
     * @return IlluminateHttpJsonResponse
     */
    public function refresh()
    {
        return $this->respondWithToken(auth()->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
        ]);
    }
}
第九步. 使用Postman测试API:   

测试API数据获取,需要在headers中添加Token;  格式
key=Authorization,value=Bearer空格token

Token刷新:

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

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

相关文章

  • koa2 + graphql + typescript + jwt + typeorm的nodejs

    最近写了一个node项目,主要使用到的技术有: koa2 // nodejs 框架 koa-router // koa路由 graphql // 查询api typescript // 强类型语言 jwt // 授权 typeorm // typescript的一个orm mysql2 // 内容数据库 mongodb // 日志存储数据库 redis // 服务器缓存 项目结构:sh...

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

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

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

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

    zzbo 评论0 收藏0
  • laravel使用JWTAPI认证

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

    SexySix 评论0 收藏0

发表评论

0条评论

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