标签: laravel-middleware

在中间件中使用Auth :: user

我正在尝试检查输入的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 laravel-middleware

5
推荐指数
1
解决办法
7854
查看次数

Laravel 5本地化:exclude/public /目录

我正试图在我的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)

php laravel laravel-routing laravel-5 laravel-middleware

5
推荐指数
1
解决办法
559
查看次数

在Laravel 5.1上运行控制器构造函数之前的中间件?

我有一个使用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->usernull的,但我做这个控制器的方法时,它不是空.

所以:

public function __construct()
{ …
Run Code Online (Sandbox Code Playgroud)

php laravel laravel-middleware dingo-api laravel-5.1

5
推荐指数
1
解决办法
2560
查看次数

如何从Laravel 5中的请求中检索url参数?

我想在中间件中使用模型执行某些操作.这是我想要实现的一个例子:

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

php laravel laravel-5 laravel-request laravel-middleware

5
推荐指数
2
解决办法
2万
查看次数

如何在laravel 5.3中登录时检查用户状态?

我使用过Laravel Authentication(快速入门).但我需要检查用户的状态(已批准/待定).如果未获批准,则会在登录页面中显示错误.我需要知道我必须在哪个文件中进行更改以及更改内容.目前我正在研究Laravel 5.3.

authentication middleware laravel laravel-middleware

5
推荐指数
2
解决办法
8538
查看次数

Laravel 5.6中的“绑定”中间件做什么?

就像标题一样。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)

尽管我仍然不了解它的作用。

middleware laravel laravel-5 laravel-middleware

5
推荐指数
2
解决办法
3349
查看次数

Laravel 5 - 如何使用用户名替代电子邮件的基本身份验证?

大家好 !

所以在Laravel 4中我们可以做到

Route::filter('auth.basic', function()
{
    return Auth::basic('username');
});
Run Code Online (Sandbox Code Playgroud)

但现在这是不可能的,而且文档并没有给出如何做到的线索.那么有人可以帮忙吗?

谢谢 !

basic-authentication laravel laravel-5 laravel-middleware

4
推荐指数
2
解决办法
5087
查看次数

在 Laravel 中,如果已经检查了中间件,我应该检查控制器中的权限吗?

我创建了一个中间件,用于检查用户是否有权执行某个操作,并将此中间件添加到我想要保护的路由中,如下所示:

// 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)

php authorization laravel laravel-5 laravel-middleware

4
推荐指数
1
解决办法
1594
查看次数

Laravel 5.4:如何通过中间件将模型对象传递给控制器​​?

我正在 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)

laravel laravel-5 laravel-middleware

4
推荐指数
1
解决办法
5362
查看次数

如何在中间件中为路由指定防护?

我有两条路线如下:

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)

php laravel laravel-5 laravel-middleware jwt-auth

4
推荐指数
2
解决办法
1万
查看次数