当前位置: 首页 > 知识库问答 >
问题:

Laravel 5.7使用tymon/jwt通过电子邮件/用户名和密码进行身份验证

鄢飞鸾
2023-03-14

我正在为我的Laravel 5.7应用程序使用jwt auth。目前,我允许客户端输入电子邮件和密码作为用户凭据。

然而,我也想让客户输入他们的用户名,而不是他们的电子邮件。所以他们有两个选择:电子邮件或用户名。

我如何在我的代码中做到这一点?

我的UserController@authenticate

public function authenticate(Request $request)
{
    $credentials = $request->only('email', 'password');
    try {
        if (!$token = JWTAuth::attempt($credentials)) {
            return response()->json([
                'status' => 401,
                'message' => 'invalid_credentials',
            ], 401);
        }
    } catch(JWTException $e) {
        return response()->json([
            'status' => 500,
            'message' => 'token_creation_failed',
        ], 500);
    }

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

提前感谢

共有2个答案

蓬威
2023-03-14

这就是我如何处理我的,用户可以选择电子邮件或电话登录。

public function login(Request $request)
    {
          //validate incoming request
        $this->validate($request, [
            'email_phone' => 'required|string',
            'password' => 'required|string',
        ]);

        try {

            $login_type = filter_var( $request->email_phone, FILTER_VALIDATE_EMAIL ) ? 'email' : 'phone';

            // return $login_type;

            $credentials = [$login_type => $request->email_phone, 'password'=>$request->password];

            if (! $token = Auth::attempt($credentials)) {
                return response()->json($this->customResponse("failed", "Unauthorized"), 401);
            }

            return $this->respondWithToken($token);
        } catch(JWTException $e) {

            return response()->json($this->customResponse("failed", "An error occured, please contact support.", $user), 500);

        }
    }
葛子昂
2023-03-14

在AuthController中,将其添加到登录方法中;

public function login()
{
    $loginField = request()->input('login');
    $credentials = null;

    if ($loginField !== null) {
        $loginType = filter_var($loginField, FILTER_VALIDATE_EMAIL) ? 'email' : 'username';

        request()->merge([ $loginType => $loginField ]);

        $credentials = request([ $loginType, 'password' ]);
    } else {
        return $this->response->errorBadRequest('What do you think you\'re doing?');
    }

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

    return $this->respondWithToken($token);
}
 类似资料:
  • 我想知道是否有能力登录与电子邮件和用户id+密码,我有一个项目,我想让用户添加一个唯一的号码(实际上是我们公司提供的工作识别号码),以能够登录到该计划将保持私人公司就业。 我需要firebase认证拒绝登录,即使电子邮件和密码是正确的,但用户id是错误的。

  • 客户已创建密钥存储库并存储凭据。为了验证密钥存储库,我已经在节点中创建了应用程序,并使用客户端id和客户端机密,我能够读取机密。但是现在客户不想使用客户id和客户机密,而是使用AZURE的用户名和密码来访问程序中的keyvault。它是一个没有MFA的keyvault访问的专用用户。 我不确定我们是否可以从节点JS使用用户名和密码访问keyvault。敬请建议。 谢谢

  • 是否可以在Flatter中使用用户名和密码(而不是电子邮件和密码)实现Firebase身份验证?有没有办法用Firebase Auth插件来实现这一点?

  • 问题内容: 我正在构建一个 Android 应用程序,在该应用程序中我使用不同的方式让用户注册自己,例如电子邮件/密码,电话,谷歌,Facebook,Twitter。我还希望用户能够将彼此添加为联系人。 如果仅使用电子邮件和Google,那么实施起来会很容易,因为我可以将用户的电子邮件存储在数据库中,并使用它来识别不同的用户并在他们之间建立关系。 但是现在的问题是,用户也可以使用他们的电话号码进行

  • 我已经创建了一个android应用程序,并使用firebase作为电子邮件注册和认证的手段。注册后,用户可以在数据库中存储库存项目。所以我的问题是,如何设置firebase身份验证规则,以便特定用户只能访问他们输入的数据。现在,每个人都可以读/写数据库。我不担心写的部分,因为电子邮件认证。提前感谢! 我的数据库是这样设置的:数据库

  • 我是新来的蛋糕和构建一个应用程序来学习它。我的用户注册系统有一些问题。到目前为止,这是我在控制器中的注册代码: 在我的模型中,我有这样的方法来散列密码: 这样,用户将使用用户名、电子邮件和哈希密码添加到我的数据库中的my表中。但是,没有进行检查以确保用户名和电子邮件是唯一的。 根据我有限的理解,我需要在我的模型中添加一些验证规则,以确保用户名和电子邮件字段在输入表之前是唯一的?目前,我只有以下验证