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

laravel 如何实现接口既可以匿名访问也可以登录状态访问?

姜宏盛
2024-03-07

laravel的一个问题,我简化了一下是这样。
我想让访问接口 /a,未登录状态访问返回 0, 登录状态下返回 1,如何实现?

正常是这样。topic 状态为 1 时可以任何人访问,状态未 2 时,只有作者可以访问。

// route.phpRoute::get('/topics/{topic}', [\App\Http\Controllers\Api\TopicController::class, 'show'])// controller$this->authorize('view', $topic);// TopicPolicyreturn $topic->status == 1 || $topic->user_id == $user->id;

上边这种情况,无论登录与否,$user 都是 null。
如果 route 加上 middleware('auth'), 那么未登录状态又无法访问。

共有1个答案

闻慎之
2024-03-07

不使用中间件,再需要的地方使用 Auth::guard 调用认证守护,来获取 user 信息。

参考我的另一个回答:php - laravel 如何在不使用sanctum中间件在控制器中获取用户信息? - SegmentFault 思否

你这里没有指定看守器,那应该就是默认的 web ,可以不传参数调用那个方法。

$user = Auth::guard()->user();
 类似资料:
  • 举例: 一篇新闻,匿名用户可以正常访问,已登录用户访问后会记录阅读历史。 这种情况下路由该怎么写的?

  • 问题内容: 我试图动态加载文本文件并进行编译。 然后,我稍后将加载已编译的.class文件: 我目前遇到两个问题:首先是我加载的.java文件是否包含匿名类。看来JavaCompiler类不会编译它们。线程“主”中的异常java.lang.IllegalAccessException:类Loader.ClassLoader无法使用修饰符“”访问类Files.myname.myclass $ 1的成

  • 问题内容: 我正在使用Spring 3.x,Java 6。 我有一个@Around方面,具有以下连接点: 因此,我基本上有兴趣拦截所有以“ Connector”结尾的类的公共方法的调用。到目前为止,一切都很好。 现在,就我而言,我想访问方法的实际参数名称: myarg 和 anotherArg 我了解使用: 仅在我使用“ -g ”标志编译代码(完全调试)并且我宁愿不这样做的情况下才有效。 还有其他

  • 本文向大家介绍如何实现一个私有变量,用getName方法可以访问,不能直接访问?相关面试题,主要包含被问及如何实现一个私有变量,用getName方法可以访问,不能直接访问?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: (1)通过defineProperty来实现   (2)通过函数的创建形式  

  • 问题内容: 我已经阅读了“ C#匿名实现接口(或抽象类) ”线程以匿名实现接口。但是我想知道使用委托或任何类似方法的.NET 2.0(NO LINQ)是否也可能实现 我从JAVA知道以下可能: (我希望我还记得,是一段时间以前我使用JAVA,但我想它是类似的东西)。每当方法需要接口的实例并且仅被调用一次时,这可能会有所帮助,因此无需为此单一方法创建新的类。 问题答案: .NET 2.0还支持匿名委

  • 我已经读到谷歌停止了之前的身份验证方法来访问谷歌API,所以现在我们必须使用OAuth2身份验证方法。我已经读到,我们必须去开发人员控制台获取ClientID和客户机机密,这样我们才能执行身份验证。但我在编写成功登录所需的更改代码方面遇到了很大的困难。 我正在寻找在登录级别进行更改的指导方针。我试图应用我在网上找到的一些代码,但我没有成功。关于开发者控制台,我已经有了一个带有客户端ID和秘密的项目