Php Laravel 4 Auth::尝试使用电子邮件或用户名和密码
在登录尝试的laravel中,我通常使用如下内容: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
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它应该是。