【问题标题】:Why isn't Laravel Auth Facade working in controller?为什么 Laravel Auth Facade 不能在控制器中工作?
【发布时间】:2019-09-25 17:05:37
【问题描述】:

我有一个控制器,它带有从 Vue 组件调用的 store() 方法。它工作正常,因为我可以成功地将数据从 Vue 组件传递到我的控制器。但是,我正在尝试获取经过身份验证的用户的身份,并且由于某种原因,我无法在控制器方法中执行此操作。我目前正在做的是检查是否有经过身份验证的用户(应该有,设置了身份验证,当我在刀片模板auth()->check() 中检查前端时返回 true)。

控制器

public function store(Request $request)
{
    $player = Player::create([
        'first_name' => $request['first_name'],
        'last_name' => $request['last_name'],
        'dob' => $request['dob'],
    ]);

    If (auth()->check()) {
        Mail::to(auth()->user())->send(new PlayerCreated($player));
    }
}

我还导入了Illuminate\Support\Facades\Auth,,所以这不是不使用Auth 外观的问题。但是,由于某种原因,它不起作用。

我想知道这是否与作为 API 路由有关?我似乎无法弄清楚为什么我仍然无法访问控制器中经过身份验证的用户。关于为什么会发生这种情况以及如何解决的任何想法?

【问题讨论】:

  • 您是使用默认的身份验证配置,还是使用不同命名的配置?
  • 在你的 config/auth.php 检查你的 api 守卫。
  • 到底是什么问题? check() 返回false,而您仍然应该登录?您是否使用 api 端点?您是否在请求中发送凭据(cookie/令牌)?
  • 你使用的是哪个 laravel 版本?
  • @AdityaThakur Ahhh 我想我可能会看到问题。 API驱动设置为token。

标签: php laravel laravel-authorization laravel-facade


【解决方案1】:

在您的app/config.php 中检查您用于身份验证的驱动程序。您似乎试图调用 Auth 门面以在 API 控制器方法中获取用户。

相反,您必须解析与授权标头一起发送的令牌以获取经过身份验证的用户。这取决于您的 api 身份验证驱动程序。

例如在 JWT 中,您可以通过以下方式获取用户:

$user = JWTAuth::parseToken()->authenticate()

或者你可以试试

$user = Auth::guard('api')->user();

【讨论】:

    【解决方案2】:

    在你的控制器中添加控制器文件的顶部

    use Auth;
    

    然后您可以使用身份验证使用电子邮件,例如

    $email = Auth::user()->email;
    

    我假设你使用的是 laravel5.5

    【讨论】:

      【解决方案3】:

      确保您在此路由上加载“网络”中间件!

      Route::group(['namespace' => 'Your namespace', 'middleware' => ['web']], function () {
          // your routes
      });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-02-23
        • 1970-01-01
        • 2017-12-26
        • 2012-04-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多