我是Laravel的新手,在实现用户身份验证方面相当成功。现在,进入下一步,我必须仅允许处于活动状态的用户登录。为此,我添加了一个
status TINYINT
我的mysql用户表中的列。
我在Laravel文档中找到了这个
指定附加条件
如果您愿意,还可以在身份验证中添加其他条件 除了用户的电子邮件和密码外,还进行查询。例如,我们 可以验证用户被标记为“活动”:
if (Auth::attempt(['email' => $email, 'password' => $password, 'active' => 1])) { // The user is active, not suspended, and exists. }
有人可以指出我需要在哪里放置这一部分。十分困惑,需要一些指导。
谢谢
答案 0 :(得分:3)
在您的LoginController上放置它:
const activeNumbers = [1, 2, 3, 7, 8, 9, 10, 16, 17, 18, 19, 20];
function getNumberText($elt) {
return parseInt($elt.text(), 10);
}
function isActiveNumber(n) {
return activeNumbers.includes(n);
}
function updateActiveClass(elt) {
const $elt = $(elt);
const n = getNumberText($elt);
$elt.toggleClass('active', isActiveNumber(n));
}
function highlightActiveCells(selector) {
$(selector).find('td').each(function () { updateActiveClass(this); });
}
highlightActiveCells('table'); // or a better selector, like a class or id
答案 1 :(得分:2)
您只需要获取用户状态并检查用户状态为真还是假。您可以通过Auth会话使用Auth :: User()-> status获取状态。尝试这个。
if(Auth::attempt(['email'=>$request->email,'password'=>$request->password])){
$userStatus = Auth::User()->status;
if($userStatus=='1') {
return redirect()->intended(url('/dashboard'));
}else{
Auth::logout();
Session::flush();
return redirect(url('login'))->withInput()->with('errorMsg','You are temporary blocked. please contact to admin');
}
}
else {
return redirect(url('login'))->withInput()->with('errorMsg','Incorrect username or password. Please try again.');
}
答案 2 :(得分:2)
只需将这段代码放在您的getContextData
或您App\Auth\LoginController
所在的其他地方即可。
LoginController
使用此代码,您将覆盖默认的public function authenticate(Request $request)
{
$credentials = $request->only('email', 'password');
if (Auth::attempt(['email' => $email, 'password' => $password, 'active' => 1])) {
// Authentication passed...
return redirect()->intended('dashboard');
}
}
函数
答案 3 :(得分:0)
在
中添加以下方法app \ Http \ Controllers \ Auth \ LoginController.php
它将扩展
AuthenticatesUsers特性
validateLogin方法。因此,基本上,它也会检查您的活动子句。
protected function validateLogin(Request $request)
{
$this->validate($request, [
$this->username() => [
'required',
Rule::exists('users')->where(function ($query) {
$query->where('active', 1);
}),
],
'password' => 'required'
]);
}
OR
将所需的代码放入 app \ Http \ Controllers \ Auth \ LoginController.php
public function authenticate(Request $request)
{
if (Auth::attempt(['email' => $request->email, 'password' => $request->password, 'active' => 1])) {
// The user is active, not suspended, and exists.
}
}
答案 4 :(得分:0)
您可以像下面这样在App \ Http \ Controllers \ Auth \ LoginController.php中覆盖authenticated()方法:
protected function authenticated(Request $request, $user)
{
if(!$user->active) {
Auth::logout();
abort(403);
};
}
请注意,这是快速的解决方案,但不是很“轻松”的解决方案。马虎。
答案 5 :(得分:0)
将此添加到您的LoginController中:
protected function credentials(Request $request)
{
return [$this->username() => $request->{$this->username()}, 'password' => $request->password, 'active' => 1];
}