Laravel 5 控制器API调用中的Laravel HTTP重定向

Laravel 5 控制器API调用中的Laravel HTTP重定向,laravel-5,httprequest,middleware,http-redirect,Laravel 5,Httprequest,Middleware,Http Redirect,我正在更新Laravel 5.2项目,以基于从SSO令牌提取的允许用户ID数组限制访问。我的应用程序的设置是创建一个自定义中间件类来处理SSO内容。我希望ID位于受限数组中的用户不能访问某些页面。它起到了一半的作用:ID受到限制的用户可以允许访问一系列页面。但是,这些页面使用API调用,虽然用户可以访问这些页面,但当他们查看这些页面时,页面被破坏,因为API调用受到限制 以下是我的中间件中的相关代码: //Check to see if user is limited access us

我正在更新Laravel 5.2项目,以基于从SSO令牌提取的允许用户ID数组限制访问。我的应用程序的设置是创建一个自定义中间件类来处理SSO内容。我希望ID位于受限数组中的用户不能访问某些页面。它起到了一半的作用:ID受到限制的用户可以允许访问一系列页面。但是,这些页面使用API调用,虽然用户可以访问这些页面,但当他们查看这些页面时,页面被破坏,因为API调用受到限制

以下是我的中间件中的相关代码:

    //Check to see if user is limited access user
    $user_id = $request->server('ssotokenid');
    if(in_array($user_id, $this->restrictedUsers))
    {

        //If restricted user, ensure that requested page is within allowable access array
        $uri = $request->path();

        //If allowed page
        if(in_array($uri, $this->allowedPagesArray))
            return $next($request);
        else
            return redirect('/restricted-landing-page');
    }
    //Continue on to oher stuff here...this works fine
下面是my routes.php中的一个页面示例;请注意,我使用的是controller方法,而不是get:

Route::controller('/subdashboard/subpage', 'Dashboard\PageController');
以下是此控制器中某些方法的示例:

class PageController extends DataController
{
    protected $dashboard = 'my-dashboard';
    protected $page = 'my-page';
    private $table = 'my-db-table';


    /**
     * Render page
     *
     * @param \Illuminate\Http\Request $request
     *
     * @return \Illuminate\View\View
     */
    public function getIndex()
    {
        return view("$this->dashboard/$this->page", [
            'appUrl'    =>  $this->rootPath,
        ]);    
    }

    /**
     * An example method and first API call that runs when the page loads
     * @param none
     * @return array
     */
    public function getData()
    {
        $data= $this->db->table($this->table)
            ->lists('myfield');

        return response()->json($data);
    }
页面的“我的视图”文件拉入一个js文件。加载的第一件事是对控制器中的getData方法的API调用。例如:

function init()
{
        //This should call the getData method in the above controller
        //This fails here
        $.getJSON(apiURL + '/data/')
        .done( function(returnData) {

            //do stuff with json response

        })
}
上述API调用失败,因为HTTP请求正在解析为allowedpage/data URL。用户可以转到allowedpage,但之后的任何操作都会失败,因为请求不会从allowedpage/数据中获取数据,而是重定向到“受限登录页”

我尝试使用strpos来确定URL是否包含allowedpage,但这不起作用

        //If allowed page
        if(in_array($uri, $this->allowedPagesArray))
            return $next($request);
        else
        {
            foreach($this->allowedPagesArrayas $page) 
            {
                if(strpos($page, $uri) !== false)
                    return $next($request);
            }

            return redirect('/restricted-landing-page');
        }

有人知道如何解决这个问题吗?

我是个白痴。我以错误的顺序使用了strpos()中的参数。当我纠正这个问题时,它工作得很好。另外,我想到我可以摆脱阵列内比较,而只使用strpos

所以不是这个

    //If allowed page
    if(in_array($uri, $this->allowedPagesArray))
        return $next($request);
    else
    {
        foreach($this->allowedPagesArrayas $page) 
        {
            if(strpos($page, $uri) !== false)
                return $next($request);
        }

        return redirect('/restricted-landing-page');
    }
我将其更新为:

   foreach($this->allowedPagesArrayas $page) 
   {
       if(strpos($uri, $page) !== false)
          return $next($request);
   }

   return redirect('/restricted-landing-page');