当前位置: 首页 > 知识库问答 >
问题:

Laravel 5.7 - 如何使用身份验证::check() 即使不使用身份验证中间件

翟俊
2023-03-14

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

我卡在使用身份验证::检查()。

控制器的功能是这样的:

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');

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

方案 2

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

在这种情况下,在控制器中,当我检查Auth::check()时,当用户登录时我得到真,当用户未登录时,错误(路由[登录]未定义)。

共有3个答案

楚昊明
2023-03-14

费利克斯·伊芙回答道:

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

如果用户未经身份验证,则返回<code>null</code>值。

江佐
2023-03-14

回答您的直接问题

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

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

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

编辑 - 不过,您可能需要使用 Web 中间件组。

干亮
2023-03-14

关于场景2,请阅读保护路由(以及以下小节“重定向未经验证的用户”)。

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


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

 类似资料:
  • 问题内容: 我目前有一个Palm WebOS应用程序,该应用程序使用Ajax.Request通过基本身份验证连接到Web服务。要发送用户名和密码,我只需将其包含在url(即http:// username:password @ ip-address:port / )中即可,效果非常好,期望密码包含字母数字字符以外的任何字符(例如, ,最近有一个用户给我发送电子邮件,该用户的密码中包含“ @”和“&

  • 问题内容: 我正在尝试连接到HTTPS URL,但是我需要使用客户端身份验证以及第三方软件在我的系统上放置的证书。 我丝毫不知道如何找到或使用它,我所要做的只是C#示例代码,这与我为此找到的所有Java答案都大不相同。(例如,KeyStore显然需要某种密码吗?) 这是我拥有的C#示例代码 然后,它仅遍历WS2_store_Certs CertificateCollection并一路检查它们。再进

  • 我试图在一个反应式Spring Boot应用程序中配置一个Spring Security性,该应用程序具有一个Vuejs前端,在未经身份验证时将用户重定向到外部OpenID提供程序(用于身份验证)。在用户通过OpenID提供程序进行身份验证并重定向回应用程序(前端)后,将根据OpenID提供程序的响应创建用户名密码身份验证令牌(身份验证),并手动进行身份验证。 但是,在执行此操作时,应用程序似乎无

  • 假设我们有以下部分的web安全配置:

  • 我有一个节点项目 我试过的密码- 运行此命令时,当secret_password错误时,它会正确显示,但当它正确时,它只显示一个单词swagger,表示swagger。io链接。 我搜索了一下,但是没有得到任何关于这个的信息或者例子。我错过了什么吗?

  • 我正在使用SpringBoot开发具有微服务架构的Rest Backend。为了保护endpoint,我使用了JWT令牌机制。我正在使用Zuul API网关。 如果请求需要权限(来自JWT的角色),它将被转发到正确的微服务。Zuul api网关的“WebSecurityConfigrerAdapter”如下。 这样,我必须在这个类中编写每个请求授权部分。因此,我希望使用方法级安全性,即“Enabl