【问题标题】:Laravel - How to prevent access to a page until user completes a certain taskLaravel - 如何在用户完成特定任务之前阻止访问页面
【发布时间】:2022-12-31 08:22:47
【问题描述】:

这个想法是:用户在登录后必须完成一项调查才能访问其他路线。我想在提交调查之前阻止这些路线,我仍在学习 Laravel,所以我不知道这是否可以通过中间件或会话或 javascript 代码或 .. 来完成?

【问题讨论】:

  • 这个问题不太适合 SO,因为答案将基于意见。 SO 是针对有关编程的特定问题,通常涉及一些代码。请查看What topics can I ask about here?What types of questions should I avoid asking? 指南以获取更多信息。尝试一些教程,尝试实施您的解决方案,如果您遇到困难,请在此处发布详细信息,展示您尝试过的内容,并描述发生了什么,为什么它不起作用。
  • 也许您可以在数据库中设置一个字段来跟踪用户是否完成了调查。也许您想要对每次登录进行调查,所以它可能是会话中的一个标志。
  • 我想要一个示例代码,说明如何从其他地方获取不是输入或数据库中的变量并在中间件中对其进行测试

标签: php laravel-8


【解决方案1】:

你可以用中间件解决 laravel 中的问题

【讨论】:

  • 谢谢你的回复,能否请你用代码示例澄清一下?
【解决方案2】:

查看https://laravel.com/docs/9.x/middleware,这是一个非常全面的文档,其中有一个关于如何实现它的清晰示例

【讨论】:

  • 确实是的,但我不知道如何将变量从表单传递到中间件,我知道逻辑是在表单完成时将变量设置为 true 并在中间件中对其进行测试。在文档中变量是来自用户的输入但这里不是
  • 你可以问我任何你想要的,我是来帮忙的!我建议您观看有关注册中间件和创建逻辑的教程视频。 @1K412
【解决方案3】:

这是旧的,但正如这篇文章https://stackoverflow.com/a/54125332/1766113 中所解释的那样,您可以使用中间件

<?php

namespace AppHttpMiddleware;

use Closure;

class CheckPermission
{
    /**
     * Handle an incoming request.
     *
     * @param  IlluminateHttpRequest  $request
     * @param  Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        // TODO: Add your logic here.

        if ($request->survey_submitted == true) {
            return redirect('home');
        }

        return $next($request);
    }
}

然后在你的路由文件中:

Route::get('survey/survey-2', function () {
   //
})->middleware(CheckPermission::class);

【讨论】:

    猜你喜欢
    • 2013-08-06
    • 2017-08-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多