我的中间件每次都重定向到主页

时间:2019-07-31 12:16:23

标签: laravel

当用户解锁测验时,我进行了测验,则只有用户可以访问测验页面(假设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,但这对我不起作用。

2 个答案:

答案 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');
        }
    }