2015-03-20 4 views
14

Я ноб в Ларавеле и работаю с Laravel 5. Для регистрации пользователя и входа в систему я хочу использовать систему laravel по умолчанию. Но необходимо расширить его с помощью двух следующих функций:Как отправить почту после регистрации по умолчанию Laravel 5?

  1. Пользователь получит электронное письмо сразу после регистрации.
  2. После сохранения регистрации пользователя, мне нужно, чтобы сделать запись в другой таблице ролей (я использовал Entrust пакет для управления ролями)

Как сделать эти вещи?

+0

Посмотрите на services/registrar.php – Digitlimit

ответ

22

Вы можете изменить Laravel 5 по умолчанию регистратор, расположенный в приложении/услуги

<?php namespace App\Services; 

    use App\User; 
    use Validator; 
    use Illuminate\Contracts\Auth\Registrar as RegistrarContract; 
    use Mail; 

    class Registrar implements RegistrarContract { 

     /** 
     * Get a validator for an incoming registration request. 
     * 
     * @param array $data 
     * @return \Illuminate\Contracts\Validation\Validator 
     */ 
     public function validator(array $data) 
     { 
      return Validator::make($data, [ 
       'name' => 'required|max:255', 
       'email' => 'required|email|max:255|unique:users', 
       'password' => 'required|confirmed|min:6' 
      ]); 
     } 

     /** 
     * Create a new user instance after a valid registration. 
     * 
     * @param array $data 
     * @return User 
     */ 
     public function create(array $data) 
     { 
      $user = User::create([ 
       'name' => $data['name'], 
       'email' => $data['email'], 
       'password' => \Hash::make($data['password']), 
       //generates a random string that is 20 characters long 
       'verification_code' => str_random(20) 
      ]); 

//do your role stuffs here 

      //send verification mail to user 
      //--------------------------------------------------------- 
      $data['verification_code'] = $user->verification_code; 

      Mail::send('emails.welcome', $data, function($message) use ($data) 
      { 
       $message->from('[email protected]', "Site name"); 
       $message->subject("Welcome to site name"); 
       $message->to($data['email']); 
      }); 


      return $user; 
     } 

    } 

Внутри resources/emails/welcome.blade.php

Hey {{$name}}, Welcome to our website. <br> 
Please click <a href="{!! url('/verify', ['code'=>$verification_code]) !!}"> Here</a> to confirm email 

NB: Вам нужно создать маршрут/контроллер для проверить

+0

Изменяет этот файл как плохую идею? Если композитор обновит Laravel, будет ли этот файл перезаписан? –

+4

@ Гора Гора совсем нет. Composer только обновляет Laravel Framework, расположенную в каталоге поставщика – Digitlimit

+0

Ваш «check_code» генерируется случайным образом из вашей модели? Или просто заполнил метод по умолчанию в файле миграции? – Cengkaruk

1

Знаете ли вы, как пользовательскому регистратору разрешить пользователю подтвердить адрес электронной почты перед входом в систему.

Я думаю о добавлении подтвержденного & подтвержденного_кода в таблицу пользователей и отправить их после регистрации.

Но есть ли какое-либо другое решение, в котором встроена аутентификация laravel 5 ???

+0

Насколько я знаю, нет встроенной опции. Таким образом, вы должны добавить два столбца, как и вы, и обновить этот подтвержденный столбец, когда пользователь подтвердит свою электронную почту. Вы также должны настроить процесс проверки подлинности, чтобы проверить, подтвержден ли пользователь. ** Если у вас есть новый вопрос, создайте новый вопрос. Не говорите это как ответ в другом посте.** – Sovon

+1

@ user4599310 Поскольку вы задаете вопрос, создайте новый вопрос. http://stackoverflow.com/questions/ask. Его против правил задавать вопрос, когда ожидается ответ. – Digitlimit

+0

Хорошо, спасибо, я буду помнить об этом –

3

Laravel имеет пустой метод с именем зарегистрирован в Осветите \ Foundation \ Auth \ RegistersUsers черта упростить эту операцию, просто заменить его следующим образом:

Сначала добавьте новое уведомление:

<?php 

namespace App\Notifications; 

use Illuminate\Notifications\Messages\MailMessage; 
use Illuminate\Notifications\Notification; 

class UserRegisteredNotification extends Notification { 

    public function __construct($user) { 
     $this->user = $user; 
    } 

    public function via($notifiable) { 
     return ['mail']; 
    } 

    public function toMail($notifiable) { 
     return (new MailMessage) 
      ->success() 
      ->subject('Welcome') 
      ->line('Dear ' . $this->user->name . ', we are happy to see you here.') 
      ->action('Go to site', url('/')) 
      ->line('Please tell your friends about us.'); 
    } 

} 

Добавить использовать строку в RegisterController.php:

use App\Notifications\UserRegisteredNotification; 

и добавить этот метод:

protected function registered(Request $request, $user) { 
    $user->notify(new UserRegisteredNotification($user)); 
} 

Вы сделали.

+0

, где вы добавляете новое уведомление? –

+1

Использование команды artisan: php artisan make: notification UserRegisteredNotification –

+1

спасибо, что помогло –

Смежные вопросы