如何使用 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 5.5 身份验证使电子邮件登录不区分大小写