2015-03-20 9 views
14

Ich bin noob in Laravel und arbeite mit Laravel 5. Für die Benutzerregistrierung und und login möchte ich das Standardsystem von Laravel verwenden. Aber, müssen Sie es mit zwei folgenden Funktionen erweitern:Wie sende ich Mail nach Laravel 5 Standard Registrierung?

  1. Benutzer erhalten eine E-Mail direkt nach der Registrierung.
  2. beim Speichern von Benutzerregistrierung, ich brauche einen Eintrag in einem anderen Rolle Tisch zu machen (ich habe Entrust-Paket für die Rollenverwaltung verwendet)

Wie diese Dinge zu tun?

+0

Sehen Sie sich services/registrar.php – Digitlimit

Antwort

22

Sie können Laravel 5 default Registrar in app/Service befindet ändern

<?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; 
     } 

    } 

Innen 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: Sie benötigen Route/Controller erstellen für überprüfen

+0

Ist das Ändern dieser Datei eine schlechte Idee? Wenn der Compiler Laravel aktualisiert, wird diese Datei überschrieben. –

+4

@Josh Mountain Gar nicht. Composer aktualisiert nur Laravel Framework im Lieferantenverzeichnis – Digitlimit

+0

Ihr 'Verifizierungscode' wird zufällig aus Ihrem Modell generiert? Oder einfach die Standardmethode für die Migrationsdatei ausgefüllt? – Cengkaruk

1

Kennen Sie Wie kann ich dem Registrar erlauben, die E-Mail-Adresse des Benutzers vor der Anmeldung zu bestätigen?

Ich denke über hinzufügen bestätigt & Confirmed_code in Benutzer Tabelle und senden sie nach der Registrierung.

Aber gibt es eine andere Lösung, die eingebaute Laravel 5-Authentifizierung?

+0

Soweit ich weiß, gibt es keine integrierte Option. Sie müssen also wie gewohnt zwei Spalten hinzufügen und die bestätigte Spalte aktualisieren, wenn der Benutzer seine E-Mail-Adresse bestätigt. Sie sollten auch den Authentifizierungsprozess optimieren, um zu überprüfen, ob der Benutzer bestätigt wurde. ** Wenn Sie eine neue Frage haben, erstellen Sie eine neue Frage. Gib es nicht als Antwort in einem anderen Post.** – Sovon

+1

@ user4599310 Da Sie eine Frage stellen, erstellen Sie eine neue Frage. http://stackoverflow.com/questions/ask. Es ist gegen die Regeln, um Frage zu stellen, wenn Antwort erwartet wird. – Digitlimit

+0

Okay, danke, ich werde darüber nachdenken, –

3

Laravel hat eine leere Methode namens registriert in Illuminate \ Foundation \ Auth \ RegistersUsers Zug um diesen Vorgang zu vereinfachen, außer Kraft setzen es einfach, wie folgend:

zunächst eine neue Benachrichtigung hinzufügen:

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

} 

Fügen Sie diese Verwendung Zeile in RegisterController.php:

use App\Notifications\UserRegisteredNotification; 

und fügen Sie diese Methode:

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

Sie fertig sind.

+0

wo fügen Sie neue Benachrichtigung hinzu? –

+1

Verwenden Sie den Befehl artisan: php artisan make: Benachrichtigung UserRegisteredNotification –

+1

Dank es half –