我刚刚开始学习Laravel,我正试图建立一个身份验证系统。我本可以使用Auth中内置的Laravel,但我遵循了一个教程来理解该概念。我的身份系统是使用Bootstrap的一些模式构建的,并且该系统可(类型)。注册有效,但是一旦我输入逻辑中的标志,注册就会以某种方式崩溃(无错误),并且不会将我的用户保存在数据库中。
这是我正在使用的:
这是注册的模态窗口。登录几乎相同,我只是更改了操作,以指向Postsignin方法。
<!-- Modal Register area -->
<div class="modal fade" id="registerModal" tabindex="-1" role="dialog" aria-labelledby="myRegisterLabel" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
{!! Form::open(['method' => 'POST', 'action' => 'UserController@postSignup', 'class' => 'login-form']) !!}
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
<h4 class="modal-title" id="myRegisterLabel">Sign Up</h4>
</div>
<div class="modal-body">
<div class="form-group">
<label>Email:</label>
{!! Form::text('email', Request::old('email'),['placeholder' => 'Email...']) !!}
</div>
<div class="form-group">
<label>Password:</label>
{!! Form::password('password', Request::old('password'),['placeholder' => 'Password...']) !!}
</div>
<div class="row">
<div class="col-sm-12">
<input type="submit" class="btn btn-primary login-btn" value="Sign Up">
</div>
</div>
</div>
{!! Form::close() !!}
@if($errors->any())
@foreach ($errors->all() as $error)
<div class="alert alert-danger">
<p>{{ $error }}</p>
</div>
@endforeach
@endif
</div>
</div>
</div>
<!-- End Modal Register area -->
这就是我设置控制器的方式:
<?php
namespace AppHttpControllers;
use AppUser;
use IlluminateHttpRequest;
use Auth;
class UserController extends Controller
{
public function postSignup(Request $request){
$this->validate($request, [
'email' => 'email|required|unique:users',
'password' => 'required|min:4'
]);
$user = new User([
'email' => $request->input('email'),
'password' => bcrypt($request->input('password'))
]);
$user->save();
return redirect('/');
}
public function postSignin(Request $request){
$this->validate($request, [
'email' => 'email|required',
'password' => 'required|min:4'
]);
if (Auth::attempt([
'email' => $request->input('email'),
'password' => $request->input('password')
])){
return redirect()->route('user.profile');
}
return redirect()->back();
}
public function getProfile(){
return view('user.profile');
}
}
对于我的路线,我仅使用:
Route::post('/','UserController@postSignup');
Route::post('/','UserController@postSignin');
,正如我所说,一旦我设置了注册中的日志,就不会将用户注册到DB中。如果我把它拿出来,它可以工作..如果我将某些用户进入数据库,则登录可以工作。感谢您的帮助!
好的,对于任何想知道这里有什么问题的人。这是因为我的路线。两者都指向"/",这以某种方式导致了这个问题。
问题是您的两种路线都匹配。Laravel工作中的路由的方式是,它将依次检查您的路线,直到找到与之匹配的路线。在这种情况下,由于URL和HTTP动词相同,因此两种情况都与第一个路线相匹配。
我看到的类似的常见问题是当您有一个带有变量的路由时。
Route::get('posts/{post}', 'PostController@show')
Route::get('posts/popular', 'PostController@popular')
在此示例中,您会遇到类似的问题,因为它会首先与第一个路线匹配,并且不会打扰到第二个路线。