【问题标题】:auth::check() and auth::user() not working Laravelauth::check() 和 auth::user() 不工作 Laravel
【发布时间】:2020-09-05 09:00:11
【问题描述】:

我有这个 Laravel 应用程序 II 正在添加基于 userType 限制用户的中间件:

中间件/Client.php:

    <?php

namespace App\Http\Middleware;
use Auth;
use Closure;

class Client
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
       // $user = $request->user();
       
        if (Auth::check() && Auth::user()->userType == 1) {
        return $next($request);
        }
        else {
        return redirect('/');
        }
    }
}

我也在 kernel.php 中添加了这个:

protected $routeMiddleware = [
    'auth' => \App\Http\Middleware\Authenticate::class,
    'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
    'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
    'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
    'can' => \Illuminate\Auth\Middleware\Authorize::class,
    'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
    'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
    'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
    'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
    'admin' => \App\Http\Middleware\AdminMiddleware::class,
    'usertype' => \App\Http\Middleware\UserType::class,
    'client' => \App\Http\Middleware\Client::class,
    'staff' => \App\Http\Middleware\Staff::class,
    'admin' => \App\Http\Middleware\AdminMiddleware::class,
];

但是当我在 web.php 中添加这个客户端时它不起作用:

Route::get('/client_profile','Client\ClientController@getclientdetails')->middleware('client');

如果我登录,它将处于 else 状态。我尝试打印 $user 但它返回 null

更新:

Route::get('/client_dashboard', function(){
  return view('client.dashboard');
 })->middleware('client');

认证.php:

protected function redirectTo($request)
{
    if (! $request->expectsJson()) {
        return route('admin.login');
    }
}

注意:我有 3 个用户类型,2 个用户员工和客户端在 api 上工作,管理员使用基本的 Laravel 身份验证

【问题讨论】:

  • 你可以在AppServiceProvider上做同样的事情
  • 试试middleware('auth:client');
  • middleware('client') 工作但 auth::check 和用户不工作
  • 请求/client_profile时你登录了吗?
  • 当我没有登录时它重定向到 / 但当我尝试登录时它仍然重定向到 /

标签: php laravel


【解决方案1】:

Auth::check() && Auth::user() 仅在您经过身份验证(登录)后才能工作。

如果您尝试在中间件中使用Auth::check() && Auth::user() 同时:

  1. 未登录

  2. 正在尝试登录

它不会起作用,因为请求没有达到验证您的登录请求所需的功能。

只有在您登录时才使用client中间件,否则它将不起作用。

【讨论】:

  • 登录后我已重定向到 client_dashboard,如您所见,我添加了客户端中间件,但它没有显示 dahsboard 重定向到 /
  • 在那部分 auth::check 和 auth::user 应该可以工作,我正在使用 api 处理一切
  • 你检查登录的用户是否有userType == 1
  • 是的 userType 是 1 但在那部分它没有得到任何用户我尝试打印 $user 它返回 null
  • 如果它返回null,那么你没有登录系统。
猜你喜欢
  • 2020-04-20
  • 1970-01-01
  • 2015-09-06
  • 2016-02-02
  • 2019-10-01
  • 2016-08-11
  • 2020-11-05
  • 2014-11-19
  • 2018-12-19
相关资源
最近更新 更多