Laravel电子邮件确认注册

时间:2016-10-02 16:25:31

标签: laravel laravel-5 laravel-5.2 laravel-authorization

我需要在创建新用户后发送电子邮件。

但我不知道如何在不收到错误的情况下返回主页。 这就是我现在正在做的事情。

User::create([
            'name' => $data['name'],
            'username' => $data['username'],
            'email' => $data['email'],
            'password' => bcrypt($data['password']),
            'phone' => bcrypt($data['phone']),
            'confirmation_code' => str_random(30),
        ]);

Email_function();

if (Auth::attempt(['email' => $data['email'], 'password' => bcrypt($data['password']) ])) {
        // Authentication passed...
        return redirect('/');
    }

我一直将此作为我的错误消息。

SErrorException in SessionGuard.php line 439:
Argument 1 passed to Illuminate\Auth\SessionGuard::login() must implement interface Illuminate\Contracts\Auth\Authenticatable, null given, called in /Applications/XAMPP/xamppfiles/htdocs/sniddl/vendor/laravel/framework/src/Illuminate/Foundation/Auth/RegistersUsers.php on line 63 and defined

修改 改变了标题以反映答案。

2 个答案:

答案 0 :(得分:4)

这是一个修改后的创建功能,为您的注册控制器添加了电子邮件功能

确保请求包含在使用名称空间的页面顶部:

use Illuminate\Http\Request;

更改控制器中的创建功能:

protected function create(Request $data)
{


    $user                       = new User;
    $user->name                 = $data->input('name');
    $user->username             = $data->input('username');
    $user->email                = $data->input('email');
    $user->password             = bcrypt($data->input('password'));
    $user->phone                = bcrypt($data->input('phone'));
    $user->confirmation_code    = str_random(60);
    $user->save();

    if ($user->save()) {

        $this->sendEmail($user);

        return redirect('VIEWPATH.VIEWFILE')->with('status', 'Successfully created user.');

    } else {

        return redirect('VIEWPATH.VIEWFILE')->with('status', 'User not created.');

    }

}

在将使用内置电子邮件的Laravels的同一控制器中创建sendEmail函数。确保您创建HTML电子邮件:

public function sendEmail(User $user)
{
    $data = array(
        'name' => $user->name,
        'code' => $user->confirmation_code,
    );
    \Mail::queue('EMAILVIEWPATH.HTMLEMAILVIEWFILE', $data, function($message) use ($user) {
        $message->subject( 'Subject line Here' );
        $message->to($user->email);
    });
}

注意: 您需要在上面的示例中以最小值更新VIEWPATH.VIEWFILEEMAILVIEWPATH.HTMLEMAILVIEWFILE

检查下面的repos对于CONTROLLER: https://github.com/laravel/laravel/blob/master/app/Http/Controllers/Auth/RegisterController.php https://github.com/jeremykenedy/laravel-auth/blob/master/app/Http/Controllers/Auth/AuthController.php

寄存器视图(刀片)示例 https://github.com/jeremykenedy/laravel-auth/blob/master/resources/views/auth/register.blade.php

收到变量的电子邮件视图: https://github.com/jeremykenedy/laravel-auth/blob/master/resources/views/emails/activateAccount.blade.php

答案 1 :(得分:0)

好的,事实证明,通过将User::create设置为变量,它允许您通过返回变量来登录用户。像这样。

$user = User::create([
            'name' => $data['name'],
            'username' => $data['username'],
            'email' => $data['email'],
            'password' => bcrypt($data['password']),
            'phone' => bcrypt($data['phone']),
            'confirmation_code' => str_random(30),
        ]);

Email_function();

return $user;