我正在构建一个Laravel
-app,我有一条路线需要包含第三方脚本/ iframe。我想用一个简单的访问代码保护该路由,而无需设置laravel
身份验证。
有可能吗?如果是这样,我该如何实现?
答案 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');