我正在做一个
博客在Laravel 8中的应用
。
有
4个用户角色
,其中,“超级管理员”。超级管理员可以
禁止所有非超级管理员的用户
。
禁止的情况如下:
在
users
桌子,有一个
active
类型的列
锡锡锡锡合金
。
在
用户权限控制器
控制器我有一个小功能,可以禁止:
public function ban_user($id){
User::find($id)->update(['active' => 0]);
return redirect()->back()->with('success', 'The user is now banned');
}
一旦用户被禁止,她/他将被
无法登录
。我通过去
vendor\laravel\ui\auth-backend\AuthenticatesUsers.php
并对此进行更改:
protected function credentials(Request $request)
{
return $request->only($this->username(), 'password');
}
to
protected function credentials(Request $request)
{
return array_merge($request->only($this->username(), 'password'), ['active' => 1]);
}
问题是:
被禁止用户的任何登录尝试都会失败,但错误消息仍然是默认消息:
这些凭据与我们的记录不匹配。
登录表单(视图):
<form method="POST" action="{{ route('login') }}">
@csrf
<div class="row mb-2">
<label for="email" class="col-md-12">{{ __('Email Address') }}</label>
<div class="col-md-12 @error('email') has-error @enderror">
<input id="email" type="email" class="form-control @error('email') is-invalid @enderror" name="email" value="{{ old('email') }}" autocomplete="email" autofocus>
@error('email')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
</div>
<div class="row mb-2">
<label for="password" class="col-md-12">{{ __('Password') }}</label>
<div class="col-md-12 @error('password') has-error @enderror">
<input id="password" type="password" class="form-control @error('password') is-invalid @enderror" name="password" autocomplete="current-password">
@error('password')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
</div>
<div class="row mb-2">
<div class="col-md-12">
<div class="form-check">
<input class="form-check-input" type="checkbox" name="remember" id="remember" {{ old('remember') ? 'checked' : '' }}>
<label class="form-check-label" for="remember">
{{ __('Remember Me') }}
</label>
</div>
</div>
</div>
<div class="row mb-0">
<div class="col-md-12">
<button type="submit" class="w-100 btn btn-primary">
{{ __('Login') }}
</button>
@if (Route::has('password.request'))
<a class="btn btn-link" href="{{ route('password.request') }}">
{{ __('Forgot Your Password?') }}
</a>
@endif
</div>
</div>
</form>
编辑:
在里面
app\Http\Controllers\Auth\LoginController.php
,我已覆盖
credentials
来自AuthenticatesUsers.php:
protected function credentials(Request $request)
{
return array_merge($request->only($this->username(), 'password'), ['active' => 1]);
}
但具体信息的问题仍然存在:(
问题:
-
如何添加自定义消息,如:“您的帐户已被暂停”?
-
有没有更好的替代方法
return array_merge($request->only($this->username(), 'password'), ['active' => 1])
在AuthenticatesUsers.php中?