【问题标题】:Laravel 5.7 - How to use Auth::check() even when not using auth middlewareLaravel 5.7 - 即使不使用身份验证中间件,如何使用 Auth::check()
【发布时间】:2019-05-16 08:58:05
【问题描述】:

我想构建一个 API 路由,它可以由经过身份验证的用户和未经过身份验证的用户调用,并根据用户是否经过身份验证返回数据。

我一直在使用 Auth::check()。

控制器功能是这样的:

class SomeController extends Controller
{
    public function check(Request $request) {
        if(Auth::check()) {
            return response()->json([
                        'message' => 'Logged in'
                    ], 200);
        }
        else {
            return response()->json([
                        'message' => 'Not logged in'
                    ], 200);
        }
    }
}

我最终有两种情况:

场景 1

Route::get('scenario1', 'SomeController@check');

在这种情况下,在控制器中,当我在 if 条件中检查 Auth::check() 时,无论用户是否经过身份验证,我总是得到错误条件。

场景 2

Route::get('scenario2', 'SomeController@check')->middleware('auth:api');

在这种情况下,在控制器中,当我检查 Auth::check() 时,当用户登录时我得到 true,当用户未登录时得到错误(Route[login] not defined)。

【问题讨论】:

    标签: authentication laravel-5 routes laravel-middleware


    【解决方案1】:

    关于场景 2,请阅读Protecting Routes(以及以下“重定向未经身份验证的用户”小节)。

    auth 中间件附加到路由时,如果用户未通过身份验证,则会将其重定向到名为login 的路由,您尚未在应用程序中实现该路由。


    但是,我不明白为什么 auth 似乎在您的场景 2 中有效,但在您的场景 1 中无效......

    【讨论】:

    • 我正在尝试实现 API,所以我不想重定向,在您回答后我编辑了 Handler.php 以响应带有错误消息“未验证”的 JSON 对象。所以现在我没有收到错误“Route [login] not defined”,而是收到错误“Unauthenticated”。这帮助我为未经身份验证的用户获得了更好的错误消息,但 Auth::check() 的问题仍然存在。我想让用户无论是否经过身份验证都可以使用此路由,并且仍然使用 Auth 门面。
    【解决方案2】:

    回答您的直接问题

    即使不使用 auth 中间件,如何使用 Auth::check()

    您只需使用Auth::check()。 Auth 中间件并不意味着您始终可以访问 Auth 类,这意味着用户必须经过身份验证才能访问/使用特定路由。

    如果您在路由上有 auth 中间件,然后在处理该路由的控制器方法上执行了Auth::check,则始终为 true,因为中间件已阻止任何未经身份验证的用户到达该点。

    编辑 - 您可能需要使用网络中间件组。

    【讨论】:

    • 这不是我的经验:当路由不在 Auth 中间件后面时,使用 Auth::check() 为经过身份验证的用户返回 null
    【解决方案3】:

    Felix Eve 回复here

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

    如果用户未通过身份验证,则返回 null

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-03
      • 2021-08-09
      • 2016-04-20
      • 2017-12-16
      • 1970-01-01
      • 2019-05-14
      • 2023-03-14
      • 1970-01-01
      相关资源
      最近更新 更多