Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.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
Php 将视图限制为仅受邀用户Laravel中间件_Php_Laravel_Middleware - Fatal编程技术网

Php 将视图限制为仅受邀用户Laravel中间件

Php 将视图限制为仅受邀用户Laravel中间件,php,laravel,middleware,Php,Laravel,Middleware,我正在寻找一种方法,以显示一个特定的看法,只有特定的访客谁得到一个链接到该视图。如何制作一个中间件,使其仅在视图来自特定源时才显示视图(如来自source.blade.php) 我不能将中间件用于guest或auth,因为这样它会将该视图提供给所有auth,但我只想将该视图提供给一个在开始时已付款并已从特定URL重定向的auth 如何设置中间件,使其仅在验证从另一个视图(如-source.blade.php 目前,我有这个页面设置如下 public function __construct()

我正在寻找一种方法,以显示一个特定的看法,只有特定的访客谁得到一个链接到该视图。如何制作一个中间件,使其仅在视图来自特定源时才显示视图(如来自source.blade.php)

我不能将中间件用于guest或auth,因为这样它会将该视图提供给所有auth,但我只想将该视图提供给一个在开始时已付款并已从特定URL重定向的auth

如何设置中间件,使其仅在验证从另一个视图(如-
source.blade.php

目前,我有这个页面设置如下

public function __construct()
    {

        $this->middleware('auth:client');
    }
这很好,它只向从客户端身份验证守卫登录的用户显示此页面,但问题是,任何客户端都可以访问此页面

我正在寻找一种方法,使之能够使它只能由谁支付了开始,并由我的网站重新指导的客户查看。也许像

public function __construct()
    {
        if(redirect_source="source.blade.php") {$this->middleware('auth:client'); }
    }

您可以在将用户重定向到特定页面时传递令牌。然后使用中间件检查该令牌是否有效


例如,有人在开始时付款,您在会话中存储该人的用户id或任何唯一标识符的散列值,然后使用url中包含的相同散列值重定向用户。然后,如果会话中存储的值与url中提供的值相同,则中间件可以处理验证。

我认为您需要一种基于用户类型限制权限的解决方案

$route->group(['middleware' => "aliasofyournewmiddle"],function(){
   //some routes here
});
如果您想让请求者进入特定的url/路由,而不是控制视图内部,则可以使用中间件来调节某些参数

所以如果你想控制它,你可以使用这个解决方案

    namespace App\Laravel\Middleware\Backoffice;

use Closure;
use Illuminate\Contracts\Auth\Guard;
use Illuminate\Http\RedirectResponse;
use Auth, Session;

class ValidSuperUser {

/**
 * The Guard implementation.
 *
 * @var Guard
 */
protected $auth;

/**
 * Create a new filter instance.
 *
 * @param  Guard  $auth
 * @return void
 */
public function __construct(Guard $auth)
{
    $this->auth = $auth;
}

/**
 * Handle an incoming request.
 *
 * @param  \Illuminate\Http\Request  $request
 * @param  \Closure  $next
 * @return mixed
 */
public function handle($request, Closure $next)
{
    if($this->auth->user()->type != "super_user") {
        Session::flash('notification-status','failed');
        Session::flash('notification-title',"Access Denied");
        Session::flash('notification-msg','You are not allowed to view the page you are tring to access.');
        return redirect()->route('backoffice.dashboard');
    }

    return $next($request);
}
}
在Http文件夹下的Kernel.php中声明新的中间件以便使用

**将其置于受保护的$routeMiddleware=[]

然后用它来帮助你的路线,需要帮助这种类型的用户

$route->group(['middleware' => "aliasofyournewmiddle"],function(){
   //some routes here
});

您的新中间件可以在请求时满足任何条件,因此传递到该url的任何输入和可用会话都可以在该中间件上使用,请根据您希望如何处理这种情况进行调整。

您可以在链接中包含一个身份验证令牌,该令牌在特定时间后过期。JWT是这方面的理想选择。你的问题过于宽泛,缺乏任何有用的背景。你能尝试添加更多细节吗please@RiggsFolly我已经更新了这个问题,并添加了一些代码,以使它具体说明这是如何工作的?我如何使用它来限制用户,比如说
premium.blade.php
?您可以在应用程序上创建额外的中间件,并在内核中声明。然后,您可以使用它将示例路由到我的附加中间件“aliasofmiddleware”=>App\Laravel\middleware\Backoffice\ValidSuperUser;然后,当我在我的路由$route->group(['middleware'=>“aliasofmiddleware”]中使用它时,function(){//仅限超级用户的路由。});谢谢,效果很好。我唯一的问题是,当您在注销后单击“上一步”按钮时,它仍然显示视图,在该视图上注册是否有效?如果按下“后退”按钮,中间件会从该视图中删除任何功能吗?您需要在js脚本上安装cookie或会话检查器。导致浏览器actionbar上的任何操作只能在js脚本上控制:)