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