I'm noob in Laravel and working with Laravel 5. For user registration and and login, I want to use default system of laravel. But, need to extend it with two following features:
How to do these things?
user should be logged with email and click the verification link. 3. then after click user verification link an email should send to the admin with user data.
Laravel 8 provides a mail class for sending an email. So, we would like to show you send an email from localhost using mailable in laravel 8 applications. Note that, you can use several SMTP drivers details (Mailgun, Postmark, Amazon SES, and sendmail) in . env file for sending email in laravel 8.
You can modify Laravel 5 default registrar located in app/services
<?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; } }
Inside 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: You need to create route/controller for verify
Laravel has an empty method named registered in Illuminate\Foundation\Auth\RegistersUsers trait to simplify this operation, just override it as following:
First add a new Notification:
<?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.'); } }
Add this use line to your RegisterController.php:
use Illuminate\Http\Request; use App\Notifications\UserRegisteredNotification;
and add this method:
protected function registered(Request $request, $user) { $user->notify(new UserRegisteredNotification($user)); }
You are done.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With