12

到目前为止,我已经制作了一个带有登录/注册功能的应用程序,并且运行良好。注册后会发送一封欢迎电子邮件。

但我想做的是在该邮件中发送一个链接,只有在点击它之后,才能登录。

比如论坛常用的注册邮箱等。

有人可以帮助我吗?

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

谢谢

4

1 回答 1

26

这里有一些线索(不会为你编写代码)。

  • 将两个字段添加到您的用户表:confirmation, confirmed
  • 在 Laravel 中创建一个类似 的路由registration/verify/{confirmation},您可以在其中尝试使用给定的确认码在数据库中查找用户(如果找到,请将用户confirmed字段设置为 1)。
  • 用户注册后,生成一个唯一的确认码(您可以str_random()为此使用帮助函数)。
  • 相应地设置新用户的数据库条目(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');
}
于 2013-08-28T10:20:42.430 回答