laravel JWTAuth对api接口权限进行鉴权

  • 一般对外提供api接口服务都需要对使用的身份进行鉴权,需要对权限方面进行控制
  • 这里我们使用JWTAuth来进行完成

配置JWTAuth

  • 这里使用的laravel为5.4版本,根据下面的JWTAuth拓展包使用范围我们使用0.5版本

    安装拓展包

composer require tymon/jwt-auth 0.5.*

打开confi/app.php进行配置

providers中配置

\Tymon\JWTAuth\Providers\JWTAuthServiceProvider::class,

aliases配置

‘JWTAuth’=> Tymon\JWTAuth\Facades\JWTAuth::class,
‘JWTFactory’=> Tymon\JWTAuth\Facades\JWTFactory::class,

生成配置文件config/jwt.php,文件中可以进行配置

php artisan vendor:publish --provider=“Tymon\JWTAuth\Providers\JWTAuthServiceProvider”

生成随机密匙

php artisan jwt:generate

Laravel version jwt-auth version
4.* 0.3.* 0.4.*
5.*&& <5.5 0.5.*
5.* 1.0.*

默认使用

  • api路由文件中写上生成密匙路由,模拟用户登录使用接口,使用的用户表为默认的user

Route::post(‘apiauth’,‘ApiController@auth’);
Route::get(‘getauth’,‘ApiController@getAuth’);

文件ApiController.php

<?php

namespace App\Http\Controllers\Admin\api;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Tymon\JWTAuth\Exceptions\JWTException;
use Tymon\JWTAuth\Facades\JWTAuth;

class ApiController extends Controller
{
    
    
    public function auth(Request $request)
    {
    
    
        $cds = $request->only('name', 'password');

        try {
    
    
            if (!$token = JWTAuth::attempt($cds)) {
    
    
                return response()->json(['error' => 'invalid_credentials'], 401);
            }
        } catch (JWTException $e) {
    
    
            return response()->json(['error' => 'could_not_create_token'], 500);
        }

        return response()->json(compact('token'));
    }

     public function getAuth(Request $request)
    {
    
    
        try {
    
    
            if (!$user = JWTAuth::parseToken()->authenticate()) {
    
    
                return response()->json(['user_not_found'], 404);
            }

        } catch (TokenExpiredException $e) {
    
    
            return response()->json(['token_expired'], $e->getStatusCode());
        }catch (TokenInvalidException $e){
    
    
            return response()->json(['token_invalid'], $e->getStatusCode());
        }catch (JWTException $e){
    
    
            return response()->json(['token_absent'], $e->getStatusCode());
        }
        return response()->json(compact('user'));
    }
}

我们先访问登录接口获取token,使用user表里面的用户
在这里插入图片描述
我们使用另外的要验证登录用户的接口来检测

访问方式需要在headers里进行配置,如下

key:Authorization vaule:Bearer+空格+token
在这里插入图片描述

这里我们通过登录路接口的的token获取到了用户的信息,我们可以根据这个信息获取到用户的权限等信息,封装成一个权限控制的中间件来对用户权限进行控制

api用户表情况

  • 很多情况接口的用户并不是默认的user用户表,是我们自己新建的用户表,JWTAuth默认的是对默认的user表进行信息鉴权,我们需要对配置信息进行修改

在config/auth.php用户登录的配置都为user表,我们不能直接修改这张表的配置,修改后会影响正常的web端。我们需要动态的修改这些数据,对需要的路由进行数据修改,我们可以使用中间件去完成

  • 新建中间件,并写上加入到相对应的路由上,我们就能使用api对应的用户表进行数据校验
public function handle($request, Closure $next)
    {
    
    
        config(['jwt.user' => 'App\Models\hwtc\Apiuser']);  //重要用于指定特定model
        config(['auth.providers.users.model' => \App\Models\hwtc\Apiuser::class]);  //重要用于指定特定model

        return $next($request);
    }

Guess you like

Origin blog.csdn.net/weixin_43674113/article/details/114653230
Recommended