2016-12-06 67 views
0

我剛開始學習Laravel,並試圖建立一個認證系統。我本可以使用auth內置的laravel,但是我遵循一個教程來理解這個概念。 我的認證系統是使用bootstrap中的某些模塊構建而成的,系統工作正常(種類)。 註冊工作,但只要我進入登錄邏輯註冊崩潰以某種方式崩潰(沒有錯誤),並沒有將我的用戶保存在數據庫中。Laravel Auth Issue

下面是我使用的是什麼:

這是新會員註冊模態窗口。登錄是幾乎相同的,我只是將操作更改爲指向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' => '[email protected]', 'class' => 'login-form']) !!} 
     <div class="modal-header"> 
     <button type="button" class="close" data-dismiss="modal" aria-label="Close"> 
      <span aria-hidden="true">&times;</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 App\Http\Controllers; 

use App\User; 
use Illuminate\Http\Request; 
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('/','[email protected]'); 

Route::post('/','[email protected]'); 

所以,我說,只要我成立登錄註冊不會將我的用戶註冊到數據庫中。如果我把它拿出來,它就可以工作。 如果我有一些用戶加入數據庫,登錄就會以任何方式工作。 感謝您的幫助!

回答

0

好的,任何人想知道這裏有什麼問題。這是因爲我的路線。兩者都指向'/',這導致了這個問題。

0

問題是你的兩條路線都是匹配的。 Laravel的路由工作方式是,它將按順序檢查路由,直到找到匹配的路由。在這種情況下,兩種情況都會匹配第一條路由,因爲URL和HTTP動詞是相同的。

我看到的一個類似的常見問題是當你有一個帶有變量的路線時。

Route::get('posts/{post}', '[email protected]') 
Route::get('posts/popular', '[email protected]') 

在這個例子中,你會遇到類似的問題,因爲它會首先匹配第一個路由,不會刻意進行到第二個。