我想修改Laravel 5提供的现有授权模块,而不是要求email
它将要求数据库中的username
字段。
答案 0 :(得分:35)
Laravel在文件中搜索变量$ username:
照亮\基金会\验证\ AuthenticatesUsers
public function loginUsername() {
return property_exists($this, 'username') ? $this->username : 'email';
}
如您所见,默认情况下,它将被命名为' email'。
但是,您可以通过添加:
在AuthController中覆盖它protected $username = 'username';
答案 1 :(得分:5)
您无需修改Auth模块来执行此操作,只需在尝试中传递用户的标识符即可。在try尝试数组中使用字段名称:
if (Auth::attempt(['username' => $username, 'password' => $password]))
{
return redirect()->intended('dashboard');
}
答案 2 :(得分:5)
您可以尝试检查文件Illuminate\Foundation\Auth\AuthenticatesAndRegistersUsers
,以获得想法。
然后在postLogin
上添加AuthController
覆盖:
public function postLogin(Request $request)
{
$this->validate($request, [
'username' => 'required',
'password' => 'required',
]);
$credentials = $request->only('username', 'password');
if ($this->auth->attempt($credentials, $request->has('remember')))
{
return redirect()->intended($this->redirectPath());
}
return redirect($this->loginPath())
->withInput($request->only('username', 'remember'))
->withErrors([
'username' => 'These credentials do not match our records.',
]);
}
您还需要将use Illuminate\Http\Request;
添加到AuthController
。
答案 3 :(得分:3)
你可以从laravel 5.3中的LoginController.php覆盖auth用户名函数
USE [lms_db]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TRIGGER [dbo].[updateLM_TIME]
ON [dbo].[INSTITUTIONS]
AFTER INSERT, UPDATE
AS
IF NOT UPDATE(CLIENT_SYNCED_TIME)
BEGIN
UPDATE dbo.INSTITUTIONS
SET lm_time = CONVERT(DATETIME, CONVERT(VARCHAR(20), GETDATE(), 120))
WHERE ID IN (SELECT DISTINCT ID FROM Inserted)
END
答案 4 :(得分:0)
在controllers \ auth \ logincontroller中添加此
protected $username = 'user_name';//user_name field name
然后转到Illuminate \ Foundation \ Auth \ AuthenticatesUsers并更改
public function username()
{
return 'email';//change this with "return $this->username;"
}
使用此方法您可以在不同的控制器中使用不同的登录类型,例如在另一个控制器controller \ admin_auth \ logincontroller
中protected $username = 'phone_number';