首页 > 解决方案 > 使用 JWT 向登录请求添加第三个参数

问题描述

我正在使用 Laravel 中的 api 并想稍微编辑登录过程。用户使用用户名和密码登录,但作为第三个参数,我想添加一个 app_id。

这是因为当 app_id 不同时,数据库中的用户名可以是双倍的。这是我当前的登录代码。它使用 JWT 作为驱动程序。

$credentials = request(['username', 'password']);
        if(!$token = auth()->attempt($credentials)) {
            return response()->json([
                'error' => ['code' => 1],
                'status' => 'error',
            ], 401);
        }

我怎样才能做到这一点?

亲切的问候,凯文沃尔特

编辑:我的整个 AuthController

class AuthController extends Controller
{
    public function __construct()
    {
        $this->middleware('jwt.verify', ['except' => ['login', 'refresh']]);
    }

    /**
     * Login to get JWT credentials
     */
    public function login() {
        //TODO: LOCKOUT AFTER X AMOUNT OF TRIES
        if(!$token = auth()->attempt($this->credentials())) {
            return response()->json([
                'error' => ['code' => 1],
                'status' => 'error',
            ], 401);
        }

        return $this->me(true, $token);
    }

    public function checkPin() {
        $username = request('username');
        $pincode = request('pincode');
        $user = auth()->user();

        if($user && $user->username && $user->pincode && $username == $user->username && $pincode == $user->pincode) {
            return $this->outputJson(0, 'auth', 'checkPin',[
                "firebase_key" => $this->create_custom_token($user->uid, true),
                "pin_ok" => 1,
            ]);
        } else {
            return $this->outputJson(0, 'auth', 'checkPin', ["pin_ok" => 0]);
        }
    }

    public function me($withToken = false, $token = "") {
        $user = auth()->user();
        $output = $user;
        $output->groups = $user->groups;
        $output->categories = $user->categories;
        $output->hasPin = $user->hasPin();
        $headers = array();
        if($withToken) {
            $headers["X-TOKEN-RETURN"] = $token;
        }
        return $this->outputJson('0', 'auth', 'me', $output, $headers);
    }

    public function logout() {
        auth()->logout();

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

标签: laravel

解决方案


就像在凭证中合并 app_id 一样简单。这是工作示例!

//Add app ID into the mix of credentials
    protected function credentials()
    {
        return array_merge(request(['username', 'password']), ['app_id' => \request()->header('X-APP-ID')]);
    }

    /**
     * Login to get JWT credentials
     */
    public function login() {
        //TODO: LOCKOUT AFTER X AMOUNT OF TRIES
        if(!$token = auth()->attempt($this->credentials())) {
            return response()->json([
                'error' => ['code' => 1],
                'status' => 'error',
            ], 401);
        }

        return $this->me(true, $token);
    }

推荐阅读