我想在laravel 5.4中使用用户名或密码登录,我尝试了一些东西,但没有任何对我有用。
public function login(Request $request) {
$field = filter_var($request->input('login'), FILTER_VALIDATE_EMAIL) ? 'email' : 'username';
$request->merge([$field => $request->input('login')]);
if ($this->auth->attempt($request->only($field, 'password')))
{
return redirect('/');
}
return redirect('/login')->withErrors([
'error' => 'These credentials do not match our records.sssss',
]);
}
我在LoginController.php
文件中添加了这个功能,但我认为它没有达到这个功能,那么怎么做呢?
答案 0 :(得分:2)
Laravel默认提供身份验证。事实上,Laravel已经完成了所有配置。您只需要在Laravel中正确设置身份验证:
当用户成功通过身份验证后,他们将被重定向到/ home URI。您可以通过在LoginController,RegisterController和ResetPasswordController上定义redirectTo属性来自定义验证后重定向位置:
protected $ redirectTo ='/';
您可以通过包含以下代码
在任何控制器中获取经过身份验证的用户使用Illuminate \ Support \ Facades \ Auth;
//获取当前经过身份验证的用户... $ user = Auth :: user();
//获取当前经过身份验证的用户ID ... $ id = Auth :: id();
您可以使用以下代码
检查用户是否经过身份验证使用Illuminate \ Support \ Facades \ Auth;
if(Auth :: check()){ //用户已登录... }
将以下代码添加到您的登录控制器
public function username(){ 返回'用户名'; }
if(filter_var($ username,FILTER_VALIDATE_EMAIL)){ //用户发送了他们的邮件 Auth :: attempt(['email'=> $ username,'password'=> $ password]); } else { //他们发送了用户名 Auth :: attempt(['username'=> $ username,'password'=> $ password]); }
答案 1 :(得分:2)
正如@Gaurav Roy所提到的,您必须首先通过在控制台php artisan make:auth
上键入来创建Laravel的身份验证路由。您会注意到Controllers
目录中存在一个名为Auth
的目录,其中包含一些控制器。打开LoginController
并覆盖username()
功能,并使用密码返回您要验证的列。在你的情况下:
private $value = 'username';
public function username()
{
return $this->value;
}
现在覆盖attemptLogin(Request $request)
功能并尝试使用用户名或电子邮件登录:
protected function attemptLogin(Request $request)
{
// try to login with username
$loginWithUsername = $this->guard()->attempt(
$this->credentials($request), $request->has('remember')
);
// if credentials with username are not valid, try with email
if (!$loginWithUsername) {
// replace username with email
$this->value = 'email';
$this->username();
// add input value to email
$request['email'] = $request['username'];
unset($request['username']);
return $this->guard()->attempt(
$this->credentials($request), $request->has('remember')
);
}
return $loginWithUsername;
}
现在转到resources->views->auth
,打开login
文件并替换电子邮件的输入,以便它可以接受用户名。例如:
自:
<input id="email" type="email" class="form-control" name="email" value="{{ old('email') }}" required autofocus>
要:
<input id="username" type="text" class="form-control" name="username" value="{{ old('username') }}" required autofocus>
现在您可以使用用户名或电子邮件登录!
答案 2 :(得分:2)
尝试这样的事情。您应该在LoginController.php中重写此代码
public function login(Request $request){
$this->validate($request, [
'email' => 'required|email',
'password' => 'required|string',
]);
if (Auth::guard()->attempt(['email'=>$request->email,'password'=>$request-password], $request->remember)) {
if successfull, then redirect to intended location
return view('level1');
else
return view('manager');
}
//if successfull, then redirect back to login with the form data
return redirect()->back()->withInput($request->only('email','remember'));
}
return $this->sendFailedLoginResponse($request);
}
答案 3 :(得分:0)
如果您想要用户名和电子邮件,那么在LoginController中,您可以尝试以下内容:
return property_exists($this, 'username') ? $this->username : 'email';