Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Laravel 5 Laravel中间件路由组的一次性授权_Laravel 5_Authorization - Fatal编程技术网

Laravel 5 Laravel中间件路由组的一次性授权

Laravel 5 Laravel中间件路由组的一次性授权,laravel-5,authorization,Laravel 5,Authorization,我正在用Laravel 5设计系统的某些部分。预期其行为如下所述 用户获取唯一的url。可以通过电子邮件提供,但这并不重要 他单击它,并使用一些临时令牌(在会话生命周期内)登录,这使他有可能访问允许路由组中的所有URL,例如,帐户/*,但如果他想访问其他受限制的URL,则要求他使用用户名/密码进行授权 如果他已经被授权,则令牌登录对他无效 我的问题是关于在《开箱即用》中这样做的可能性。我知道有一些中间件服务,但我不确定默认的保护行为是否不需要改变,才能像我预期的那样工作。 我以前使用过Symfo

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

  • 用户获取唯一的url。可以通过电子邮件提供,但这并不重要
  • 他单击它,并使用一些临时令牌(在会话生命周期内)登录,这使他有可能访问允许路由组中的所有URL,例如,
    帐户/*
    ,但如果他想访问其他受限制的URL,则要求他使用用户名/密码进行授权
  • 如果他已经被授权,则令牌登录对他无效
  • 我的问题是关于在《开箱即用》中这样做的可能性。我知道有一些中间件服务,但我不确定默认的保护行为是否不需要改变,才能像我预期的那样工作。
    我以前使用过Symfony,默认情况下它是通过防火墙解决的,所以在Laravel中也可能有预构建的解决方案?

    您完全可以使用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添加到您的组中,这是一种在中间件上定义您的请求的方法,Laravel5.2支持多中间件