PHP Laravel保护未经身份验证的子页面路由

时间:2019-05-16 07:56:09

标签: php laravel

我正在构建一个Laravel-app,我有一条路线需要包含第三方脚本/ iframe。我想用一个简单的访问代码保护该路由,而无需设置laravel身份验证。

有可能吗?如果是这样,我该如何实现?

2 个答案:

答案 0 :(得分:1)

您可以创建自己的middleware

$routesMiddleware文件的app/Http/Kernel.php中注册中间件。

然后像这样使用它:

Route::get('script/iframe', 'YourController@index')->middleware('your_middleware');

-编辑

您可以像这样访问路线:

yoururl.com/script/iframe?code=200

然后使用中间件handle方法:

if ($request->code !== 200) {
  // you don't have access redirect to somewhere else
}

// you have access, so serve the requested page.
return $next($request); 

答案 1 :(得分:1)

我在下面提供的所有解决方案均建议您尝试使用code=X URI / GET参数访问路由。

简单路线

您可以简单地检查每个路由方法中给定的代码是否正确,如果不是这种情况,则可以重定向到某个地方。

web.php

Route::get('yourRouteUri', 'YourController@yourAction');

YourController.php

use Request;

class YourController extends Controller {
    public function yourAction(Request $request) {
        if ($request->code != '1234') {
             return route('route-to-redirect-to')->redirect();
        }

        return view('your.view');
    }
}

使用中间件进行路由

或者,如果您有很多需要检查的中间件,则可以使用中间件来避免在每个路径中重复条件块。

app/Http/Middleware/CheckAccessCode.php

namespace App\Http\Middleware;

use Request;
use Closure;

class CheckAccessCode
{
    public function handle(Request $request, Closure $next)
    {
        if ($request->code != '1234') {
            return route('route-to-redirect-to')->redirect();
        }

        return $next($request);
    }
}

app/Http/Kernel.php

// Within App\Http\Kernel Class...

protected $routeMiddleware = [
    // Other middlewares...    

    'withAccessCode' => \App\Http\Middleware\CheckAccessCode::class,
];

web.php

Route::get('yourRouteUri', 'YourController@yourAction')->middleware('withAccessCode');