繁体   English   中英

Laravel 4 Auth ::尝试使用电子邮件或用户名和密码

[英]Laravel 4 Auth::attempt using either email or username and password

在laravel中尝试登录时,我通常使用如下所示的内容:

if (Auth::attempt(array('email' => $usernameinput, 'password' => $password), true))
{
    // The user is being remembered...
}

基本上$usernameinput将检查表中的email

我当时正在考虑以另一种方式来执行此操作,例如表中有emailusernamepassword $usernameinput可以是我表中的emailusername段。

如何使用以下条件进行Auth::attempt

(email==$usernameinput OR username==$usernameinput) AND password == $password

好吧,您可以简单地检查$usernameinput与电子邮件模式匹配,如果匹配,则使用email字段,否则使用username字段。 这听起来是合理的,因为,好吧,您的数据库中实际上不应该包含任何不匹配该模式的电子邮件。 像这样:

$field = filter_var($usernameinput, FILTER_VALIDATE_EMAIL) ? 'email' : 'username';

if (Auth::attempt([$field => $usernameinput, 'password' => $password], true)) {
    // ...
}

另一个选项是扩展Illuminate\\Auth\\Guard ,在新的服务提供者中添加所需的功能并将其设置为auth组件。

可以这样做

$field = Validator::make(array('email' => $usernameinput, array('email' => 'email'))->passes() ? 'email' : 'username';
if (Auth::attempt(array($field => $usernameinput, 'password' => $password), true)) {
    return Redirect::intended('profile');
}

用户可以使用电子邮件字段作为其用户名,并且该名称可能与他们用于电子邮件字段的电子邮件不匹配。 更安全地尝试两次身份验证:

if (Auth::attempt(array(
            'email'     => Input::get('email_or_username'),
            'password'  => Input::get('password')
        )) ||
    Auth::attempt(array(
            'username'     => Input::get('email_or_username'),
            'password'  => Input::get('password')
        ))) {
    // SUCCESS
} else {
    // FAILURE
}

这是完整的工作解决方案:(使用Laravel 5.3测试)

只需将此方法(或可以说重写)添加到app \\ Http \\ Controllers \\ Auth \\ LoginController.php中

public function login(Request $request)
    {
        $usernameinput = $request->input('email');
        $password = $request->input('password');
        $field = filter_var($usernameinput, FILTER_VALIDATE_EMAIL) ? 'email' : 'username';

        if (Auth::attempt([$field => $usernameinput, 'password' => $password])) {
            return redirect()->intended('/');
        } else {
            return $this->sendFailedLoginResponse($request);
        }
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM