Laravel中间件一次授权路由组

时间:2016-02-01 14:13:09

标签: laravel-5 authorization

我正在Laravel 5中设计系统的某些部分。预计行为如下所述。

  1. 用户获取唯一网址。它可以通过电子邮件提供,但这无关紧要。
  2. 他点击它,并使用一些临时令牌(会话生命周期)登录,这使他有可能访问允许路由组中的所有URL,例如。 account/*,但如果他想要访问其他受限制的网址,则会要求他使用其用户名/密码进行授权。
  3. 如果他已获得授权,则令牌登录对他没有任何影响。
  4. 我的问题是关于在Laravel开箱即可做类似事情的可能性。我知道有一些中间件服务,但我不确定是否需要将默认的Guard行为更改为按预期工作。 我之前曾经和Symfony一起工作过,默认情况下它是由防火墙解决的,所以也许在Laravel中有预建的解决方案吗?

1 个答案:

答案 0 :(得分:0)

你绝对可以使用laravel,这是一个未经过测试的示例代码,

public function handle($request, Closure $next)
{
    if ($this->auth->guest()) {
        if (preg_match('account', $request->route()->getName()) { //if url is under account, you can get route info from $request->route();
            if (!session()->get($token)) { // if not have valid token
                if ($request->ajax()) {
                    return response('Unauthorized.', 401);
                } else {
                    return redirect()->route('admin.login.index',['referrer'=>urlencode($request->url())]);
                }
            }
        } else {
            if ($request->ajax()) {
                return response('Unauthorized.', 401);
            } else {
                return redirect()->route('admin.login.index',['referrer'=>urlencode($request->url())]);
            }
        }
    }
    return $next($request);
}

然后从您的路线中添加中间件auth到您的组,这是一种在中间件上定义请求的方法,laravel 5.2支持多个中间件。