登录  /  注册
首页 > php框架 > Laravel > 正文

Laravel使用JWT实现API用户授权的详细步骤

不言
发布: 2019-01-01 09:34:39
转载
10059人浏览过

本篇文章给大家带来的内容是关于laravel使用jwt实现api用户授权的详细步骤,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

第一部分 安装JWT

第一步. 使用Composer安装 tymon/jwt-auth :

`composer require tymon/jwt-auth 1.0.0-rc.3

第二步. 添加服务提供商(Laravel5.4及以下版本,5.5及以上版本无需添加),

将下面这行添加至 config/app.php 文件 providers 数组中:

<?php // 文件:app.php
&#39;providers&#39; => [
    // other code
    Tymon\JWTAuth\Providers\LaravelServiceProvider::class,
]
登录后复制

第三步. 发布配置文件,
运行如下命令发布 jwt-auth 的配置文件:  

php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\LaravelServiceProvider"

第四步. 生成密钥,

此命令会在你的 .env 文件中新增一行 JWT_SECRET=secret。  
php artisan jwt:secret

第二部分 开始配置

第五步. 配置 Auth guard,`
在 config/auth.php 文件中,你需要将 guards/driver 更新为 jwt,  
只有在使用 Laravel 5.2 及以上版本的情况下才能使用。

<?php     &#39;defaults&#39; => [
    'guard' =&gt; 'api',
    'passwords' =&gt; 'users',
],
// other code
'guards' =&gt; [
    'api' =&gt; [
        'driver' =&gt; 'jwt',
        'provider' =&gt; 'users',
    ],
],
登录后复制

第六步. 更改 User Model,
在User Model上实现TymonJWTAuthContractsJWTSubject接口,
实现getJWTIdentifier() and getJWTCustomClaims()两个方法。

<?php namespace App;

use Tymon\JWTAuth\Contracts\JWTSubject;

class User extends Authenticatable implements JWTSubject
{
    // other code

    // Rest omitted for brevity
    
    /**
     * Get the identifier that will be stored in the subject claim of the JWT.
     *
     * @return mixed
     */
    public function getJWTIdentifier()
    {
        return $this->getKey();
    }

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

第三部分 快速创建DEMO测试

第七步. 添加一些基本身份验证路由:

<?php Route::group([
    &#39;middleware&#39; => 'api',
    'prefix' =&gt; '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:
<?php namespace App\Http\Controllers;

use App\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;

class AuthController extends Controller
{
    /**
     * Create a new AuthController instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('auth:api', ['except' =&gt; ['login', 'register']]);
    }

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

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

        return $this-&gt;respondWithToken($token);
    }

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

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

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

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

    /**
     * 获取经过身份验证的用户.
     *
     * @return \Illuminate\Http\JsonResponse
     */
    public function me()
    {
        return response()-&gt;json(auth()-&gt;user());
    }

    /**
     * 刷新Token.
     *
     * @return \Illuminate\Http\JsonResponse
     */
    public function refresh()
    {
        return $this-&gt;respondWithToken(auth()-&gt;refresh());
    }


    /**
     * Get the token array structure.
     *
     * @param  string $token
     *
     * @return \Illuminate\Http\JsonResponse
     */
    protected function respondWithToken($token)
    {
        return response()-&gt;json([
            'access_token' =&gt; $token,
            'token_type' =&gt; 'bearer',
            'expires_in' =&gt; auth()-&gt;factory()-&gt;getTTL() * 60
        ]);
    }
}
登录后复制

第九步. 使用Postman测试API:  

2049843802-5c298dc210fca_articlex.png

2846081465-5c298e5dd34d1_articlex.png

测试API数据获取,需要在headers中添加Token;  格式

key=Authorization,value=Bearer空格token

2846081465-5c298e5dd34d1_articlex.png

Token刷新:

2846081465-5c298e5dd34d1_articlex.png

以上就是Laravel使用JWT实现API用户授权的详细步骤的详细内容,更多请关注php中文网其它相关文章!

智能AI问答
PHP中文网智能助手能迅速回答你的编程问题,提供实时的代码和解决方案,帮助你解决各种难题。不仅如此,它还能提供编程资源和学习指导,帮助你快速提升编程技能。无论你是初学者还是专业人士,AI智能助手都能成为你的可靠助手,助力你在编程领域取得更大的成就。
来源:segmentfault.网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2024 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号