我的项目需要用户名,而不是电子邮件。我在Laravel 5.8和Nova v2.1.0中实现了这一点。升级到L 6.x N 2.6.1后,所有东西都坏了。所以我重新安装了干净的L6.x和N2.6.1。现在我想要自定义登录,但我不想像以前那样编辑任何Nova包脚本。我已经将这段代码添加到nova/Http/Controllers/LoginController.php中,一切工作正常。
public function username()
{
return 'username';
}当我将代码添加到App/Nova/Http/Controller/LoginController.php (原始代码的副本)时,登录仍然需要一个电子邮件地址。或者使用nova中的原始文件。
发布于 2019-12-19 12:40:06
我就是这么做的
我重写了来自
class LoginController extends Controller至
class LoginController extends \Laravel\Nova\Http\Controllers\LoginController如果你想在登录页面上使用用户名或电子邮件,你必须添加这个。此方法将确定用户如何输入他们的凭据
public function username()
{
$login = \request()->input("email");
$field = filter_var($login, FILTER_VALIDATE_EMAIL) ? 'email' : 'username';
\request()->merge([$field => $login]);
return $field;
}因为用户可以使用电子邮件或用户名登录,但nova的默认登录只有一个输入框。如果用户输入了错误的用户名或该用户名不存在,则必须添加此内容才能显示
protected function sendFailedLoginResponse(Request $request)
{
throw ValidationException::withMessages([
'email' => [trans('auth.failed')],
]);
}在我的控制器上,我添加了其他方法来确定用户是否为管理员,是否能够访问后端,或者用户是否仍处于活动状态。
protected function authenticated(Request $request, $user)
{
if($user->isSuperAdmin()) {
return redirect(config('nova.path'));
}
if($user->can('backend')) {
return redirect(config('nova.path'));
}
return redirect('/');
}通过添加方法来检查用户是否处于活动状态,我需要添加此方法来检查用户是否可以登录
private function activeUser($username)
{
$user = User::where($this->username(), $username)->first();
if($user) {
return $user->active;
}
return false;
}
public function login(Request $request)
{
$active = $this->activeUser($request->only($this->username()));
if(! $active) {
return $this->sendFailedLoginResponse($request);
}
return parent::login($request);
}希望这能有所帮助
https://stackoverflow.com/questions/58821321
复制相似问题