自定义Laravel注册流程

问题描述

我想自定义Laravel注册过程。 用户无法直接单击链接进行注册,而是将链接发送给用户进行注册。例如:http://127.0.0.1:8000/register?id=123 如果客户表中有该ID,则获取ID对应的电子邮件地址,然后使用该电子邮件地址重定向到“注册”屏幕。

如何更改web.php文件以接受参数? Auth :: routes();

如何更改与Register相关的控制器以接受参数并将值传递给视图?

Register screen

解决方法

您的问题尚不清楚,但我会尝试。

首先,您必须像这样Auth::routes(['register' => false]);那样关闭auth的注册,这样,即使在url中键入内容,用户也无法访问注册路由。

完成此操作后,转到Auth \ RegisterController类,并窥视其使用的RedirectsUsers特性,您将找到类似于以下内容的register方法:

    /**
     * Handle a registration request for the application.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function register(Request $request)
    {
        $this->validator($request->all())->validate();

        event(new Registered($user = $this->create($request->all())));

        $this->guard()->login($user);

        if ($response = $this->registered($request,$user)) {
            return $response;
        }

        return $request->wantsJson()
                    ? new Response('',201)
                    : redirect($this->redirectPath());
    }

这是发生注册逻辑的地方,您可以根据自己的喜好自定义它,但请注意不要摔死自己。

对于路由,您可以做一两件事

例如1

Route::get('/custom/registration','RegisterController@register')->name('register');

然后您可以像这样在控制器中访问id

public function register(Request $request)
{
    $id = $request->query('id)

    // Run your logic...
}

例如2

Route::get('/custom/registration/{id}','RegisterController@register')->name('register');

然后您可以像这样在控制器中访问id

public function register(Request $request,$id)
{
    
    // Run your logic...
}

对您有意义的任何方式都可以。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...