将用户角色添加到jwt,laravel 5 jwt-auth

RVa*_*een 14 php jwt laravel

我有一个laravel 5后端,使用jwt-auth在登录时发送jwt-token作为json响应.

现在我想将用户角色添加到laravel发送的jwt令牌中,我尝试了以下方式:

这是我现在的控制器

<?php 
namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use JWTAuth;
use Tymon\JWTAuth\Exceptions\JWTException;
use Illuminate\Database\Eloquent\Model;
use App\User;

class AuthenticateController extends Controller
{
    public function authenticate(Request $request)
    {
        // grab credentials from the request
        $credentials = $request->only('email', 'password');
        $user = User::where('email', '=', $credentials['email'])->first();
        $customClaims = ['role' => $user->role];

        try {
            // attempt to verify the credentials and create a token for the user
            if (! $token = JWTAuth::attempt($credentials, $customClaims)) {
                return response()->json(['error' => 'invalid_credentials'], 401);
            }
        } catch (JWTException $e) {
            // something went wrong whilst attempting to encode the token
            return response()->json(['error' => 'could_not_create_token'], 500);
        }
        // all good so return the token
        return response()->json(compact('token'));
    }
}
?>
Run Code Online (Sandbox Code Playgroud)

有更清洁的方法吗?

Ola*_*Oni 3

您当前正在查询用户两次,一次使用电子邮件来获取角色,第二次在方法中查询。我jwt::attempt()建议将查询减少到一次,但进行身份验证 {Auth::attempt($credentials)}然后将检索到的用户 JWT::fromUser()与自定义声明一起传递到方法中。所以

JWT::fromUser($user,['role' => $user->role])
Run Code Online (Sandbox Code Playgroud)