Laravel编辑Auth中间件

时间:2016-04-12 05:11:28

标签: laravel laravel-5.2

我正在尝试编辑主Authenticate.php中间件,但是当我添加以下内容时,我收到错误

  

app.app已将您重定向次数

我的目的是编辑auth中间件以检查用户是否有用户名。这样可以防止有人退出注册页面,然后直接进入网站的安全部分。

Auth Middleware:

public function handle($request, Closure $next)
{
    if ($this->auth->guest()) {
        if ($request->ajax()) {
            return response('Unauthorized.', 401);
        } else {
            return redirect()->guest('/');
        }
    }

    // This is the modified portion. Check for a username, if one is found, complete 
       the request, otherwise redirect back to the oauth page.

    if (Auth::user()->username)
    {
        return $next($request);  
    }

    return redirect()->route('oauth.oauth')->with('user' , Auth::user()->id);

}

1 个答案:

答案 0 :(得分:0)

您正在使用auth中间件创建循环引用,以便在Auth::user()->username不存在时将其重定向到您的oauth页面。

他们正在点击oauth页面然后检查失败,因此不断重定向到该页面。

最好的办法是在新的中间件中拆分它,但如果您不想这样做,您可以检查它们正在点击的URL并根据此进行排除。

例如:

在顶部添加use Request;,然后在中间件的正文中添加以下内容:

if (Request::path() == 'your/oauth/path')
{
    return $next($request);
}

所以它可以像这样:

public function handle($request, Closure $next)
{
    if ($this->auth->guest()) {
        if ($request->ajax()) {
            return response('Unauthorized.', 401);
        } else {
            return redirect()->guest('/');
        }
    }

    // This is the modified portion. Check for a username, if one is found, complete 
       the request, otherwise redirect back to the oauth page.

    if (Auth::user()->username)
    {
        return $next($request);  
    }

    if (Request::path() == 'your/oauth/path')
    {
        return $next($request);
    }

    return redirect()->route('oauth.oauth')->with('user' , Auth::user()->id);

}

只需将'your/oauth/path'替换为实际路径即可。该示例看起来像一个完整的网址www.example.com/your/oauth/path