2016-10-02 132 views
-1

我需要在创建新用户后发送电子邮件。Laravel电子邮件注册确认

但我不知道如何返回到主页没有出现错误。 这就是我现在正在做的。

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 

编辑: 改变了标题,以反映答案。

+0

哪里是错误的休息吗? – Devon

+0

我现在加了。对于那个很抱歉。 – CriticalTheWizard

+1

这是RegistersUser的第63行吗? auth :: attempt? – Devon

回答

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.'); 

    } 

} 

创建sendEmail f在使用电子邮件中构建的Laravels的相同控制器中进行联合。请确保您创建和你的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); 
    }); 
} 

注: 你将需要在上面的例子minimium更新VIEWPATH.VIEWFILEEMAILVIEWPATH.HTMLEMAILVIEWFILE

检查以下回购的控制器: 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

EMAIL VIEW接收变量: https://github.com/jeremykenedy/laravel-auth/blob/master/resources/views/emails/activateAccount.blade.php

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; 
+0

这是你如何创建一个用户在你的认证控制器? – developernator

+0

是的,我现在。难道我做错了什么? – CriticalTheWizard

相关问题