Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel 4 Auth::尝试使用电子邮件或用户名和密码_Php_Laravel_Laravel 4 - Fatal编程技术网

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

Php Laravel 4 Auth::尝试使用电子邮件或用户名和密码,php,laravel,laravel-4,Php,Laravel,Laravel 4,在登录尝试的laravel中,我通常使用如下内容: if (Auth::attempt(array('email' => $usernameinput, 'password' => $password), true)) { // The user is being remembered... } $field = filter_var($usernameinput, FILTER_VALIDATE_EMAIL) ? 'email' : 'username'; if (Au

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

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

if (Auth::attempt([$field => $usernameinput, 'password' => $password], true)) {
    // ...
}
基本上,
$usernameinput
将使用我表格中的
电子邮件进行检查

我想用另一种方式来做,比如在我的表格中有
电子邮件
用户名
密码
$usernameinput
可以是我的表中的
电子邮件
用户名
字段

我如何才能
Auth::trust
,条件如下:

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

那么,您只需检查
$usernameinput
是否与电子邮件模式匹配,如果匹配,请使用
电子邮件
字段,否则请使用
用户名
字段。这听起来很合理,因为数据库中不应该有任何与模式不匹配的电子邮件。大概是这样的:

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

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

另一个选项是扩展
illumb\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'); } $field=Validator::make(数组('email'=>$usernameinput,数组('email'=>'email'))->passs()?'email':'username'; if(Auth::trunt(数组($field=>$usernameinput,'password'=>$password),true)){ 返回重定向::预期('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);
        }
    }

很好,这是我想要的简单解决方案:-)@CodeDemon它应该是。