我正在使用Laravel 5.1
创建我的第一个大项目,并且我想在用户登录期间添加额外的检查以查看用户是否已激活其帐户。
这是users
表
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('username');
$table->string('email')->unique();
$table->string('password', 60);
$table->rememberToken();
$table->boolean('is_admin')->default(true);
$table->boolean('is_active')->default(true);
$table->timestamps();
});
我已经尝试在$credentials['is_active'] = true;
$credentials = $this->getCredentials($request);
之后添加AutheticatesUser@postLogin
并且它可以正常运行,但如果用户的帐户处于非活动状态,我希望有一个自定义错误,因为默认帐户( These credentials do not match our records.
}对用户来说并不直观。
有任何建议吗? 谢谢!
答案 0 :(得分:3)
您可以覆盖AuthController中的postLogin方法,并检查用户是否处于活动状态。
class AuthController extends Controller
{
public function postLogin(Request $request){
$this->validate($request, [
'email' => 'required|email', 'password' => 'required',
]);
$credentials = $this->getCredentials($request);
// This section is the only change
if (Auth::validate($credentials)) {
$user = Auth::getLastAttempted();
if ($user->is_active) {
Auth::login($user, $request->has('remember'));
return redirect()->intended($this->redirectPath());
} else {
return redirect($this->loginPath()) // Change this to redirect elsewhee
->withInput($request->only('email', 'remember'))
->withErrors([
'active' => 'Please active your account'
]);
}
}
return redirect($this->loginPath())
->withInput($request->only('email', 'remember'))
->withErrors([
'email' => $this->getFailedLoginMessage(),
]);
}
}
答案 1 :(得分:0)
您可以查看以下方式
if(Auth::attempt(['email'=>$email,'password'=>$password,'is_admin'=>1]))
{
return redirect()->intended('admin/dashboard');
}