如何处理多页表单与 Login\ 注册在拉拉维尔的末端

共4个回答,已解决, 标签: laravel

我正在创建一个表单, 以便向网站提交请求。在此窗体中, 用户将填写窗体 subject description , 以及其他一些字段, 一旦用户单击 Submit 按钮, 窗体验证将在后台工作, 并应调用以下操作。

  • 首先, 我们需要检查用户是否已登录, 然后将用户 id 附加到表单并提交该表单。
  • 如果用户没有登录, 请在下一页中要求登录或注册
  • 如果用户已经注册, 他将尝试登录, 然后处理登录并与新登录的用户一起提交请求。
  • 如果用户未注册, 则他将尝试注册, 然后注册该用户并向该新注册用户提交表单。

请注意:我还在考虑检查验证, 因此, 如果验证在用户登录过程中失败, 注册, 然后不要丢失表单请求数据。

我心里有以下想法。

  1. 创建一个调用的控制器 RequestController , 然后创建不同的方法 dataCollectStep checkLoginRegisterStep registeringStep , loginStep 所以首先调用 dataCollectStep 的第一个调用, 并在方法检查用户是否登录, 然后提交表单与用户登录 id。
  2. 如果用户未登录, 则将窗体的所有字段添加到 session 中, 并调用下一个方法 checkLoginRegisterStep
  3. 如果用户单击登录, 然后 loginStep 调用用户并验证登录, 如果登录成功, 则从会话中获取所有值并提交该窗体。

但这个想法看起来并不好, 因为我必须创建重复的代码 login registering 作为和。会话管理也看起来很困难, 如果窗体更大, 那么我们需要一个接一个地销毁会话, 因为销毁所有会话可能会导致登录用户的问题。

那么, 有什么好办法吗?

第1个答案(采用)

我检查了你的概念, 真的很好。我有检查以下的事情在我自己的项目, 然后我给你一个完整的解决方案。

如果你按照我所有的步骤, 那么它一定会解决你的问题。

首先, 拉拉维尔有内置的认证系统, 太好了。你应该用那个。

在终端中运行此命令

php artisan make:auth

此命令将在 laravel 中创建登录名和注册。您也可以通过搜索自定义它。

此命令将在控制器中创建 auth 控制器

这也在资源/视图中创建 html

此命令还在数据库/迁移中创建数据库表。您可以运行 php artisan migrate 在数据库中添加迁移。


多页控制器. php

use Session;


class MultipageController extends Controller
{


    public function store(Request $request){

        $input = $request->all();

        //First we need to check if the user is logged in then attached the user id with the form and submit that form.
        if (Auth::check()) {
            $user_id = Auth::user()->id;

            $input['user_id'] = $user_id;

        }else{
        // If user is not logged in ask for the login or the signup in the next page

            Session::put('filled_form', $input);
            return redirect()->route('login');
        }


        //Your save code

        // Destroy form session here
        Session::forget('filled_form');

    }

}

作者/logincontrol. php

在登录控制器中添加以下方法, 即使在注销后, 该方法也能使会话数据保持活动状态。

use Session;
use Illuminate\Http\Request;


public function logout(Request $request)
    {
        $this->guard()->logout();
        return redirect('/');
    }

作者/logincontrol. php

在登录控制器中添加以下方法, 该方法将您重定向到窗体 url (如果它有会话数据) 您还需要通过进入每个输入来打印表单 Session::get('filled_form') 数据。

protected function authenticated(Request $request, $user)
{

    if ( Session::get('filled_form') ) {// do your margic here
        return redirect('form-url');
    }

    /* If not form filled then redirect where you want */
    return redirect('/homepage');
}

form.blade.php

将数据输入表单并将其打印到窗体中





第2个答案

作为检查用户是否登录的最佳方法, 在允许用户执行特定操作之后, 您可以通过 auth Laravel 提供的方式进行检查。

你只需要跑

php artisan make:auth

它将创建所需的控制器和视图文件。

并使用 auth 中间件, 不允许用户在没有登录的情况下提交表单。

希望这对:)

第3个答案

首先, 我们不打算编写您的代码。

至于最好的方法。如果您希望控制器在受保护的使用中间件中登录, 在这种情况下, 请使用 auth 中间件。

如果有人没有将他们重定向到登录页, 这将检查他们是否登录。 至于身份控制器类型

php artisan make:auth

这将设置基本的身份验证需要, 一个注册控制器登录控制器和所有的视图。

如果要将首次将请求闪存到会话中的值存储。

希望这有所帮助!

第4个答案

一开始你可以跑 php artisan make:auth 。之后, 您可以在路由中使用中间件身份 Route::group(['middleware' => ['web', 'auth']], function () { other routes here 验证。

此外, 您还可以在构建控制器时使用中间件, 如下所示public function __construct() { $this->middleware('auth'); }

您可以使用当前用户 id Auth::id() ; 注册后, 拉维尔将用户转接到登录页面

相关问题

React Laravel 5.8.33 Axios: 使用 axios.post 请求注册用户时出错; 澄清代码问题 工匠命令 “品牌: 月 Laravel 验证” 是不确定的 使用 Laravel 创建新项目会引发异常