我正在尝试检查输入的URL是否与数据库中经过身份验证的用户slug相同.因此,如果用户访问example.com/user/bob-smith并且实际上Bob Smith已登录,则应用程序将让Bob继续,因为他在User表中的slug是bob-smith.
我有中间件注册,但是当我这样做
public function handle($request, Closure $next)
{
if($id != Auth::user()->slug){
return 'This is not your page';
}
else{
return $next($request);
}
}
Run Code Online (Sandbox Code Playgroud)
我明白了
找不到"App\Http\Middleware\Auth"类
我不确定如何在中间件中使用它.任何人都可以帮忙吗?
我正试图在我的Laravel 5项目中实现本地化,而且我遇到了一个问题.我用来捕获语言的中间件如下:
<?php namespace App\Http\Middleware;
use Closure;
use Illuminate\Routing\Redirector;
use Illuminate\Http\Request;
use Illuminate\Foundation\Application;
use Illuminate\Contracts\Routing\Middleware;
class Language implements Middleware {
public function __construct(Application $app, Redirector $redirector, Request $request) {
$this->app = $app;
$this->redirector = $redirector;
$this->request = $request;
}
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
// Make sure current locale exists.
$locale = $request->segment(1);
if ( ! array_key_exists($locale, $this->app->config->get('app.locales'))) {
$segments …Run Code Online (Sandbox Code Playgroud) 我有一个使用tymon/jwt-auth软件包验证JWT用户的中间件:
public function handle($request, \Closure $next)
{
if (! $token = $this->auth->setRequest($request)->getToken()) {
return $this->respond('tymon.jwt.absent', 'token_not_provided', 400);
}
try {
$user = $this->auth->authenticate($token);
} catch (TokenExpiredException $e) {
return $this->respond('tymon.jwt.expired', 'token_expired', $e->getStatusCode(), [$e]);
} catch (JWTException $e) {
return $this->respond('tymon.jwt.invalid', 'token_invalid', $e->getStatusCode(), [$e]);
}
if (! $user) {
return $this->respond('tymon.jwt.user_not_found', 'user_not_found', 404);
}
$this->events->fire('tymon.jwt.valid', $user);
return $next($request);
}
Run Code Online (Sandbox Code Playgroud)
然后我有一个控制器,我想将用户从中间件传递给控制器.
所以我在控制器上做了:
public function __construct()
{
$this->user = \Auth::user();
}
Run Code Online (Sandbox Code Playgroud)
问题是,$this->user是null的,但我做这个控制器的方法时,它不是空.
所以:
public function __construct()
{ …Run Code Online (Sandbox Code Playgroud) 我想在中间件中使用模型执行某些操作.这是我想要实现的一个例子:
public function handle($request, Closure $next)
{
$itemId = $request->param('item'); // <-- invalid code, serves for illustration purposes only
$item = Item::find($itemId);
if($item->isBad()) return redirect(route('dont_worry'));
return $next($request);
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,如何从中检索所需的参数$request?
我使用过Laravel Authentication(快速入门).但我需要检查用户的状态(已批准/待定).如果未获批准,则会在登录页面中显示错误.我需要知道我必须在哪个文件中进行更改以及更改内容.目前我正在研究Laravel 5.3.
就像标题一样。Laravel 5.6中的默认API中间件列为Kernel.php:
protected $middlewareGroups = [
'api' => [
'throttle:60,1',
'bindings',
],
];
Run Code Online (Sandbox Code Playgroud)
我很感谢外行对功能的解释bindings,这在任何地方都找不到。
它使用SubstituteBindings具有handle方法的类:
public function handle($request, Closure $next)
{
$this->router->substituteBindings($route = $request->route());
$this->router->substituteImplicitBindings($route);
return $next($request);
}
Run Code Online (Sandbox Code Playgroud)
尽管我仍然不了解它的作用。
大家好 !
所以在Laravel 4中我们可以做到
Route::filter('auth.basic', function()
{
return Auth::basic('username');
});
Run Code Online (Sandbox Code Playgroud)
但现在这是不可能的,而且文档并没有给出如何做到的线索.那么有人可以帮忙吗?
谢谢 !
我创建了一个中间件,用于检查用户是否有权执行某个操作,并将此中间件添加到我想要保护的路由中,如下所示:
// VerifyPermission middleware
class VerifyPermission {
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @param $permission
* @return mixed
*/
public function handle($request, Closure $next, $permission)
{
$user = auth()->user();
if (auth()->check() && $user->hasPermission($permission))
{
return $next($request);
}
return redirect('/');
}
}
// Routes
Route::patch('company/{id}', ['as' => 'updateCompany',
'uses' => 'SettingsController@updateCompany',
'middleware' => 'permission:manage_company']
);
Run Code Online (Sandbox Code Playgroud)
我的问题是,是否需要再次检查updateCompany或中间件检查是否足够?
public function updateCompany()
{
if(Auth::user()->hasPermission('manage_company'))
{
// Updates Company
}
return abort(403, "Unauthorized"); …Run Code Online (Sandbox Code Playgroud) 我正在 Laravel 5.4 中创建一个应用程序,其中有一个中间件ValidateBooking,然后是一个使用类似 的 URL 调用的控制器/booking/6/car,其中列出了分配给该预订的所有汽车。
在ValidateBooking中间件中,我6使用Booking::find(6)Eloquent 函数验证上述 URL 中的预订 ID。但我想要的是,如果 Booking 存在,则将该对象传递给控制器,这样我就不会在控制器中再次获取它。我不想为同一件事查询数据库两次。
我尝试了几种方法将模型对象与$request中间件合并,但无法在控制器中正确访问它。
我的中间件代码是:
<?php
namespace App\Http\Middleware\Booking;
use Closure;
use App\Booking\Booking;
class ValidateBooking
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
$booking = Booking::find($request->booking_id);
if (!$booking) {
return redirect(route('booking.show', $request->booking_id));
}
$request->attributes->add(['bookingInstance' => $booking]);
return $next($request);
}
} …Run Code Online (Sandbox Code Playgroud) 我有两条路线如下:
Route::GET('admins/', 'UserController@index')->middleware('jwt.auth');
Route::GET('visitors', 'UserController@indexVisitors')->middleware('jwt.auth');
Run Code Online (Sandbox Code Playgroud)
我在auth.php 中有警卫:
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'jwt-auth',
'provider' => 'users',
],
'visitor_api' => [
'driver' => 'jwt-auth',
'provider' => 'visitors',
],
],
Run Code Online (Sandbox Code Playgroud)
我试图在中间件中指定守卫,但它不起作用。
Route::GET('visitors', 'UserController@indexVisitors')
->middleware('jwt.auth.visitors_api');
Run Code Online (Sandbox Code Playgroud)