2013-08-28 104 views
12

我已經使用登錄/註冊的應用程序,它工作正常。 註冊後發送歡迎郵件。Laravel 4:如何確認電子郵件?

但我想要做的是發送一個鏈接,在該郵件,只有點擊它後,纔有可能登錄。

像論壇等共同註冊的電子郵件..

有人能幫助我嗎?

這是方法的postRegister:

public function postRegister() 
{ 
    $input = Input::all(); 

    $rules = array(
     'username' => 'required', 
     'password' => 'required'); 

    $validation = Validator::make($input, $rules); 

    if ($validation->passes()) { 

     $password = $input['password']; 
     $password = Hash::make($password); 

     $user = new User; 
     $user->username = $input['username']; 
     $user->email = $input['email']; 
     $user->password = $password; 

      $mailer = new Mailers\UserMailer($user); 

       // var_dump($mailer); 

        $mailer->welcomeMail()->deliver(); 

        $user->save(); 

     return Redirect::to('afterRegister'); 
    } 

    return Redirect::back()->withInput()->withErrors($validation)->with('message', 'Validation Errors!'); 
} 

謝謝

回答

26

這裏有幾個線索(不是要去寫的代碼爲你)。

  • 將兩個字段添加到您的用戶表中:confirmation,confirmed
  • 在Laravel中創建一個類似registration/verify/{confirmation}的路由,其中​​您嘗試使用給定的確認碼在數據庫中找到用戶(如果找到,請將用戶的confirmed字段設置爲1)。
  • 用戶註冊後,生成一個唯一的確認碼(您可以使用str_random()助手功能)。新用戶的
  • 集DB進入相應(confirmation =隨機碼,confirmed = 0)
  • 包括與生成的驗證碼驗證鏈接(根據您的驗證路徑建)在您的電子郵件到新的用戶。

驗證嘗試,現在可以做這樣的:

$user = array(
     'username' => Input::get('username'), 
     'password' => Input::get('password'), 
     'confirmed' => 1 
); 

if (Auth::attempt($user)) { 
    // success! 
    return Redirect::route('restricted/area'); 
} 
+0

是否可以設置自定義的消息,如果僅證實是假的。所以你會收到一條錯誤消息,例如帳戶尚未註冊。 –

+1

@Sven B你可以通過('message','Account is not registered')來做Redirect :: route('restricted/area') - >;並在你的視圖中使用{{$ message}}。 – Unnawut

+2

我不喜歡使用「確認」列。當用戶被激活時,我只是刪除確認碼。這樣,所有沒有confirmation_token的用戶都會被激活。 –