如何使用 Laravel 框架创建注册模式?

Posted

技术标签:

【中文标题】如何使用 Laravel 框架创建注册模式?【英文标题】:How to create a signup modal with Laravel Framework? 【发布时间】:2017-01-19 10:51:15 【问题描述】:

我的布局中有一个模式来创建用户(作为注册选项),我可以正确创建用户,但我需要自动登录并将他重定向到另一个页面,我该怎么做?

这是我的代码:

我在标题布局中的模态

<div id="LoginModal" class="modal fade" role="dialog">
    <div class="modal-dialog">
        <div class="modal-content" style="background-image: url(/assets/img/Login/Email_Gate.png);width: 420px;height: 550px;">
            <div class="modal-body" style="padding:0;">
                <div class="tabbable">
                    <ul class="nav nav-tabs" id="LoginNavUl" style="margin:50px;">
                        <li style="width: 150px;margin: 0; height: 47px;"><a href="#tab1" data-toggle="tab" aria-expanded="false" style="text-align: center;">Sign Up</a></li>
                        <li class="active" style="width: 150px;margin: 0;"><a href="#tab2" data-toggle="tab" aria-expanded="true" style="text-align: center;">Login</a></li>
                    </ul>

                    <div class="tab-content active">
                        <div class="tab-pane" id="tab1">
                            <div class="green-banner" style="background-color: #04c08d; height: 60px;">
                                <p>Nice to meet you.</p>
                            </div>
                            <div class="content-login" style="padding-left:70px; padding-right:70px; padding-top:50px;">
                                <form id="formRegister" class="form-horizontal" role="form" method="POST" action=" route('signup') ">
                                    <input type="hidden" name="_token" value=" Session::token() ">
                                    <input type="email" class="form-control" name="email" style="width: 100%;" placeholder="Email"><br/>
                                    <input type="password" class="form-control" name="password" style="width: 100%;" placeholder="Password"><br/>
                                    <input type="date" style="width: 100%; margin-bottom: 70px;" name ="eventdate" placeholder="Event Date"/><br/>
                                    <div class="btn-submit-login">
                                        <div>
                                            <button id="edit-submit" name="op"  type="submit" style="border: none;background-color: transparent;">SIGN UP</button>
                                        </div>
                                    </div>
                                </form>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>

我的控制器:

public function createUser(Request $request )                        
                                                                         
$email = $request['email'];                                           
$password = bcrypt($request['password']);                             

$user = new UserModel();                                              
$user->email = $email;                                                
$user->password = $password;                                          
$user->role_id = 3;                                                   
$user->save();                                                        

/*
 I need to log the user here 
*/

if  user is logged in     
    Redirect::to('/collection');                                      
 else                                                               
    Redirect::to('/');                                                
                                                                     

【问题讨论】:

laravel.com/docs/5.3/authentication 【参考方案1】:

为什么不使用 Laravel 内置的身份验证?

Laravel 5.3 中,您应该会看到一个名为app/Http/Controllers/Auth/RegisterController.php 的类

默认情况下,此控制器使用名为RegistersUser 的特征。这门课完全符合你的想法。它注册一个用户。 您可以覆盖 RegisterController.php 类中的任何特征方法以添加您想要的任何功能。

您还有一个 LoginController.php 登录用户,它甚至提供了一个名为 authenticated() 的方法,您可以在您的 LoginController.php 中覆盖该方法以执行各种操作之后用户已通过身份验证。

作为旁注,我不确定您是否完全理解 laravel 的“要点”,或者它实际提供的功能。您真的需要创建自己的UserModel 吗?它内置了一个用户模型,该模型可以与框架的其余部分无缝协作——尤其是登录/注册类。当在 laravel 中扩展和自定义如此多的各个方面如此容易时,我不明白您为什么要重新发明***。

我的建议是看一下文档@@https://laravel.com/docs/

看看 laravel 提供了什么,并尝试使用它。你毕竟在使用 Laravel。如果您不打算利用 Laravel 提供的功能,那么最好通过 composer 引入 Eloquent 等,而不需要增加 Laravel 的重量。

【讨论】:

【参考方案2】:

您可以在将用户保存到 createUser 函数后立即添加这两行代码来登录用户并重定向他:

Auth::login($user);

Redirect::to('/collection');

【讨论】:

为此,请确保用户模型使用Authenticatable。 OP 似乎使用他自己的用户模型【参考方案3】:

我认为这样的东西应该在你的控制器中工作:

public function createUser(Request $request )                        
                                                                         
$email = $request['email'];                                           
$password = bcrypt($request['password']);                             

$user = new UserModel();                                              
$user->email = $email;                                                
$user->password = $password;                                          
$user->role_id = 3;                                                   
$user->save();

if  ( Auth::attempt(['email' => $email, 'password' => $password]) )     
    Redirect::to('/collection');                                      
 else                                                               
    Redirect::to('/');                                                

https://laravel.com/docs/5.3/authentication#authentication-quickstart

【讨论】:

以上是关于如何使用 Laravel 框架创建注册模式?的主要内容,如果未能解决你的问题,请参考以下文章

如何使代客指向 localhost:8000 而不是 laravel 框架的 htdocs

如何在子域共享主机上安装 laravel

如何使用 Laravel 5.5 身份验证使电子邮件登录不区分大小写

如何使用 laravel 4 框架创建文本文件和 JSON?

如何创建Laravel框架应用

使用 laravel 框架时如何在 xampp 上创建虚拟主机