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

laravel 如何让一个 controller method 既可以匿名访问,也可以身份认证后访问?

谢灵均
2023-07-18

举例:
一篇新闻,匿名用户可以正常访问,已登录用户访问后会记录阅读历史。

这种情况下路由该怎么写的?

Route::middleware('guest')->group(function () {    Route::get('/news/{news}', [\App\Http\Controllers\Api\NewsController::class, 'show']);});

共有1个答案

华誉
2023-07-18

路由应该是这样的:

Route::get('/news/{news}', [\App\Http\Controllers\Api\NewsController::class, 'show']);

NewsController :

use Illuminate\Support\Facades\Auth;public function show(News $news){    if (Auth::check()) {        // 用户已经登录,记录阅读历史        $user = Auth::user();        // 记录用户的阅读历史,这取决于你的实现        // $user->recordRead($news);    }    // 显示新闻    return view('news.show', ['news' => $news]);}
 类似资料:
  • laravel的一个问题,我简化了一下是这样。 我想让访问接口 /a,未登录状态访问返回 0, 登录状态下返回 1,如何实现? 正常是这样。topic 状态为 1 时可以任何人访问,状态未 2 时,只有作者可以访问。 上边这种情况,无论登录与否,$user 都是 null。 如果 route 加上 middleware('auth'), 那么未登录状态又无法访问。

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

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

  • 我有一个S3存储桶,其中包含以下策略: 从任何web客户端上载和删除对象都可以,无需任何身份验证,例如cURL。 但是,如果我作为IAM用户进行了身份验证(没有任何策略,甚至没有策略),我在尝试访问()匿名上传的对象时会收到403个错误。可以访问以非匿名方式(例如通过S3控制台)上传的其他对象。发生了什么事? 重述: 匿名用户: 可以上传文件到桶中 可以下载文件从桶上传自己或由任何其他用户 可以将

  • 我的项目在Java1.8u151中运行良好。我正在尝试将它升级到Java12,但是我得到了以下错误。 这是唯一的错误,在Java12中的大多数包中都会重复出现,但在Java8中效果良好。 我已尝试将所有jar文件从模块路径移动到类路径。模块路径中只有Java 12库。我在Java版本的软件包中寻找任何不推荐的东西。我用不同的Java版本尝试了3种不同的系统(都运行OS-X10.13.6、10.13

  • null 身份验证工作流会是什么样子?有任何可用的例子吗?我们可以通过使用MSAL来实现吗? 假设我们已经创建了一个Azure密钥库,并在该库中保存了一些秘密。如何在Windows 10下运行的桌面应用程序中实现以下功能: 当前Windows用户是Azure AD组GroupA的一部分,位于Azure密钥库的同一承租人之下。 当当前用户从同一用户会话启动桌面应用程序时,应用程序可以访问所述密钥库中