首页 > 解决方案 > 当后端和前端分为两个 git repos 和域时如何在 laravel 中处理用户身份验证

问题描述

我正在使用 laravel (v8) 开发一个更大的 Web 应用程序,因为项目可能会增长到预期的大小,所以我决定从一开始就将前端和后端拆分为两个不同的存储库。

现在我想为前端实现用户身份验证,我现在的问题是我应该如何处理这个问题。当前端和后端在同一个仓库中但像这样拆分时,我会知道从哪里开始,我似乎无法找到一种方法来解决它。

仅供参考:我已经为我的后端路由实现了基于令牌的身份验证

编辑:调整标题

标签: laravelauthenticationarchitecturefrontendbackend

解决方案


很简单,你可以对一个端点进行身份验证,我们称之为/api/login,这个端点将以json格式返回令牌、refresh_token和用户,然后只需通过javascript将令牌保存到本地存储或其他地方( cookie、localfile 等),然后当您进行 api 调用时,只需使用保存的令牌来传递 laravel api 中间件,使用 Laravel Passport 和 Laravel Responder 包检查此登录示例代码

    public function login(LoginRequest $request)
{
    $validated = $request->validated();//array valid data
    $credentials = request(['email', 'password']);
    try {
        $response = $this->client->post("{$this->oauth_server}/oauth/token", [
            'form_params' => [
                'grant_type' => 'password',
                'client_id' => config('auth.oauth_client_id'),
                'client_secret' => config('auth.oauth_secret'),
                'username' => $request->email,
                'password' => $request->password,
            ],
        ]);
    } catch (Exception $e) {
        return responder()->error($e->getCode(), $e->getMessage())->respond();
    }

    return responder()->success([
        "oauth" => json_decode((string)$response->getBody(), true)
    ])->respond();
}

推荐阅读