laravel - 如何在 laravel 中批准多重身份验证
问题描述
我正在使用 Laravel 多重身份验证,它工作正常,管理员重定向到管理页面,用户重定向到主页,但我希望如果用户未获得批准,那么它不应该登录并看到错误“你可以登录您的帐户将在 24 小时后获得批准”
我在管理中间件中添加了这段代码,但它不起作用:
if (auth()->check() && $request->user()->status == 0) {
return redirect()->guest('login');
}else{
return redirect('login')->with('flash_message_error','You can login after approval');
}
管理中间件:
public function handle($request, Closure $next)
{
if (auth()->check() && $request->user()->admin == 0) {
return redirect()->guest('home');
}
return $next($request);
}
路线:
Route::group(['middleware' => ['web','auth']], function(){
Route::get('/home', function(){
if (Auth::user()->admin == 0) {
return view('home');
}else {
$users['users'] = \App\User::all();
return view('adminhome', $users);
}
});
});
用户模型:
protected $fillable = [
'name', 'email', 'password', 'admin',
];
此 id 数据库迁移:
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('email')->unique();
$table->timestamp('email_verified_at')->nullable();
$table->string('password');
$table->boolean('admin')->default(0);
$table->boolean('approved')->default(0);
$table->rememberToken();
$table->timestamps();
});
我只是希望当用户注册时它应该等到数据库中的已批准列手动变为 1
解决方案
在您Auth/LoginController
添加以下方法中
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use AuthenticatesUsers;
use Illuminate\Support\Facades\Hash;
use App\User;
class LoginController extends Controller
{
protected function credentials(Request $request)
{
$credentials = $request->only($this->username(), 'password');
$credentials['status'] = 1;
return $credentials;
}
protected function sendFailedLoginResponse(Request $request)
{
$errors = [$this->username() => trans('auth.failed')];
// Load user from database
$user = \App\User::where($this->username(), $request->{$this->username()})->first();
// Check if user was successfully loaded, that the password matches
// and status is not 1. If so, override the default error message.
if ($user && \Hash::check($request->password, $user->password) && $user->status != 1) {
$errors = [$this->username() => 'you can login after 24hr after your account will be approved'];
}
if ($request->expectsJson()) {
return response()->json($errors, 422);
}
return redirect()->back()
->withInput($request->only($this->username(), 'remember'))
->withErrors($errors);
}
}
推荐阅读
- java - 创建一个列表,其中每个列表对象都有自己的子对象
- java - 有没有办法访问另一个容器内组件的属性?
- javascript - 如何在 ReactJS 中调用 Wrapper(父)方法
- json - 如何访问未知键的值?
- c - 我对我必须为该程序中的每个 unix 命令实现的子进程感到困惑
- python - groupby 日期 年月
- javascript - 有人可以帮助弄清楚如何循环这段代码吗?
- reactjs - 我的字体没有出现在网络中(reactjs,样式化组件)
- java - 如何实现多租户 Spring Boot 应用程序(每个用户都有自己的数据库)
- c# - StorageLibraryContentChangedTrigger 后台任务的 UWP 注册失败并显示“未找到”