当用户解锁测验时,我进行了测验,则只有用户可以访问测验页面(假设127.0.0.1:8000/quiz1)。但是我已经解锁了测验,然后我的中间件也把我带到了/ home页面。
我已经尝试过这种逻辑,但是没有用。
<?php
namespace App\Http\Middleware;
use Closure;
use App\Theme_User;
use App\User;
use Auth;
class UnlockMiddleware
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
$user = auth()->user()->id;
$theme_user = Theme_User::find($user);
if($theme_user->unlocked == 1){
return $next($request);
}
else {
return redirect('/login');
}
}
}
在我的Theme_User中,存储了user_id和unlocked,但这对我不起作用。
答案 0 :(得分:1)
您需要检查它们是否先登录,例如使用\Auth::check()
...
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if(\Auth::check()) {
$user = \Auth::user()->id;
$theme_user = Theme_User::find($user);
if($theme_user->unlocked == 1){
return $next($request);
}
// Logged in but not unlocked
}
else {
return redirect('/login');
}
}
我不知道登录后未解锁的逻辑含义是什么,您需要填补空白
答案 1 :(得分:1)
在尝试从auth获取用户ID之前,可能值得检查用户是否已登录。
public function handle($request, Closure $next)
{
if(auth()->check()) {
$user = auth()->user()->id;
$theme_user = Theme_User::find($user);
if($theme_user->unlocked == 1){
return $next($request);
}else{
return redirect('whatever_page_if_user_is_logged_in_but_not_unlocked');
}
}else {
//this only happens if user is not logged in
return redirect('/login');
}
}