Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Laravel 4: how to make confirmation email?

I have made until now an app with login/register and it works fine. After the registration a welcome email is sent.

But what i would like to do is to send a link, within that mail, that only after clicking on it, it is possible to login.

Like the common registration email for forum etc..

Someone can help me please?

This is the postRegister method:

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!');
} 

Thank you

like image 1000
FrancescoMussi Avatar asked Aug 28 '13 07:08

FrancescoMussi


People also ask

How does laravel handle email verification?

First, a route will be needed to display a notice to the user that they should click the email verification link in the verification email that Laravel sent them after registration. Second, a route will be needed to handle requests generated when the user clicks the email verification link in the email.


1 Answers

Here are a few clues (not gonna write the code for you).

  • Add two fields to your user table: confirmation, confirmed.
  • Create a route in Laravel like registration/verify/{confirmation}, in which you try and find a user in your DB with the given confirmation code (if found, set user's confirmed field to 1).
  • Upon user registration, generate a unique confirmation code (you can use the str_random() helper function for this).
  • Set DB entry of new user accordingly (confirmation = the random code, confirmed = 0)
  • Include a verification link (built according to your verification route) with the generated confirmation code in your email to your new user.

Auth attempts can now be done like this:

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

if (Auth::attempt($user)) {
    // success!
    return Redirect::route('restricted/area');
}
like image 95
ciruvan Avatar answered Oct 04 '22 00:10

ciruvan