2013-08-28 36 views
12

Tôi đã thực hiện cho đến bây giờ một ứng dụng có đăng nhập/đăng ký và nó hoạt động tốt. Sau khi đăng ký, một email chào mừng sẽ được gửi.Laravel 4: cách tạo email xác nhận?

Nhưng điều tôi muốn làm là gửi liên kết, trong thư đó, chỉ sau khi nhấp vào đó, bạn có thể đăng nhập.

Giống như email đăng ký chung cho diễn đàn, v.v.

Ai đó có thể giúp tôi?

Đây là phương pháp 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!'); 
} 

Cảm ơn bạn

Trả lời

26

Dưới đây là một vài manh mối (không sẽ viết mã cho bạn).

  • Thêm hai trường vào bảng người dùng của bạn: confirmation, confirmed.
  • Tạo tuyến đường ở Laravel như registration/verify/{confirmation}, trong đó bạn thử và tìm người dùng trong DB của bạn với mã xác nhận đã cho (nếu tìm thấy, hãy đặt trường confirmed của người dùng thành 1).
  • Khi đăng ký người dùng, hãy tạo mã xác nhận duy nhất (bạn có thể sử dụng hàm trợ giúp str_random() cho việc này).
  • Set DB nhập cảnh của người dùng mới phù hợp (confirmation = mã ngẫu nhiên, confirmed = 0)
  • Bao gồm một liên kết xác minh (xây dựng theo tuyến đường xác minh của bạn) với mã xác nhận tạo ra trong email của bạn để người dùng mới của bạn.

nỗ lực Auth bây giờ có thể được thực hiện như thế này:

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

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

Có thể thiết lập một thông báo tùy chỉnh nếu chỉ xác nhận là sai. vì vậy bạn nhận được một thông báo lỗi như tài khoản chưa được đăng ký. –

+1

@Sven B bạn có thể làm Chuyển hướng :: tuyến đường ('giới hạn/khu vực') -> với ('thư', 'Tài khoản không được đăng ký'); và sử dụng {{$ message}} trong chế độ xem của bạn. – Unnawut

+2

Tôi không thích sử dụng cột 'đã xác nhận'. Khi người dùng được kích hoạt, tôi chỉ cần xóa mã xác nhận. Bằng cách này, tất cả người dùng không có confirmation_token được kích hoạt. –