Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Route::get('home/account/email', ['middleware' => ['auth', 'isVerified'], 'uses' => 'AuthChangeEmailController@showForm'])->name('home.account.email');
- Route::post('home/account/email_save', ['middleware' => ['auth', 'isVerified'], 'uses' => 'AuthChangeEmailController@saveForm'])->name('home.account.email_save');
- Route::get('home/account/email_set/{token}', ['middleware' => ['auth', 'isVerified'], 'uses' => 'AuthChangeEmailController@emailSet'])->name('home.account.email_set');
- public function saveForm(Request $request, ChangeEmailContract $changeEmailService)
- {
- $user = Auth::user();
- $rules = [
- 'email' => 'required|email|unique:users',
- 'password' => 'required|checkpassword:'.$user->email,
- ];
- $messages = [
- 'email.required' => 'Please enter an email address',
- 'email.email' => 'Please enter a valid email address',
- 'email.unique' => 'This e-mail is already taken. ',
- 'password.required' => 'Please enter your password',
- 'password.checkpassword' => 'Your enter wrong password',
- ];
- Validator::make($request::all(), $rules, $messages)->validate();
- $changeEmailService->sendChangeEmailMail($user, Request::get('email'));
- return redirect()->route('home')->with('status', "Confirmation change E-mail link send to ".Request::get('email'));
- }
- public function emailSet($token, ChangeEmailContract $changeEmailService)
- {
- $email = Request::get('email');
- try {
- $user = $changeEmailService->setEmail($token, $email);
- }
- catch (AppExceptionsChangeEmailNotFoundException $e) {
- return redirect()->route('home')
- ->with('status', $e->getMessage());
- }
- Auth::login($user);
- return redirect()->route('home')
- ->with('status', 'You successfully activated your new email!');
- }
- namespace AppServicesAuth;
- use AppModelsUser;
- use AppContractsAuthChangeEmailContract;
- use AppContractsAuthChangeEmailRepositoryContract;
- use AppExceptionsChangeEmailNotFoundException;
- use IlluminateMailMailer;
- use IlluminateMailMessage;
- class ChangeEmailService implements ChangeEmailContract
- {
- protected $mailer;
- protected $changeEmailRepo;
- public function __construct(ChangeEmailRepositoryContract $changeEmailRepo)
- {
- $this->changeEmailRepo = $changeEmailRepo;
- }
- public function sendChangeEmailMail($user, $email)
- {
- $token = $this->changeEmailRepo->createEmailChange($user, $email);
- Mail::to($email)->send(
- new AppMailChangeEmail(array(
- 'email' => $email,
- 'token' => $token,
- ))
- );
- }
- public function setEmail($token, $email)
- {
- $changeEmail = $this->changeEmailRepo->getChangeEmailByTokenAndEmail($token, $email);
- if ($changeEmail === null) {
- throw new ChangeEmailNotFoundException();
- }
- $user = User::find($changeEmail->user_id);
- if (!$user) {
- throw new ChangeEmailNotFoundException();
- }
- $user->email = $email;
- $user->save();
- $this->changeEmailRepo->deleteChangeEmail($token);
- return $user;
- }
- }
- namespace AppRepositoriesAuth;
- use AppContractsAuthChangeEmailRepositoryContract;
- use AppModelsEmailChange;
- use CarbonCarbon;
- use IlluminateDatabaseConnection;
- use IlluminateSupportFacadesDB;
- class ChangeEmailRepository implements ChangeEmailRepositoryContract
- {
- public function createEmailChange($user, $email)
- {
- $email_change = $this->getEmailChange($user);
- if (!$email_change) {
- return $this->createEmailChangeRecord($user, $email);
- }
- return $this->updateEmailChangeRecord($user, $email);
- }
- public function getEmailChange($user)
- {
- return EmailChange::where('user_id', $user->id)->first();
- }
- public function getChangeEmailByTokenAndEmail($token, $email)
- {
- return EmailChange::where(array('token' => $token, 'email' => $email))->first();
- }
- public function deleteChangeEmail($token)
- {
- EmailChange::where('token', $token)->delete();
- }
- private function updateEmailChangeRecord($user, $email)
- {
- $token = $this->getToken();
- EmailChange::where('user_id', $user->id)->update([
- 'token' => $token,
- 'email' => $email,
- 'created_at' => new Carbon()
- ]);
- return $token;
- }
- private function getToken()
- {
- return hash_hmac('sha256', str_random(40), config('app.key'));
- }
- private function createEmailChangeRecord($user, $email)
- {
- $token = $this->getToken();
- EmailChange::insert([
- 'user_id' => $user->id,
- 'token' => $token,
- 'email' => $email,
- 'created_at' => new Carbon()
- ]);
- return $token;
- }
- }
- namespace AppModels;
- use IlluminateDatabaseEloquentModel;
- class EmailChange extends Model
- {
- protected $table = 'email_change';
- public function user()
- {
- return $this->belongsTo(User::class);
- }
- }
- namespace AppModels;
- use IlluminateNotificationsNotifiable;
- use AppNotificationsCustomResetPassword;
- use IlluminateFoundationAuthUser as Authenticatable;
- use PlunkMediable;
- class User extends Authenticatable
- {
- use Notifiable;
- use PlankMediableMediable;
- protected $fillable = [
- 'name', 'email', 'password',
- ];
- protected $hidden = [
- 'password', 'remember_token',
- ];
- public function sendPasswordResetNotification($token)
- {
- $this->notify(new CustomResetPassword($token));
- }
- }
- namespace AppProvidersAuth;
- use IlluminateSupportServiceProvider;
- class ChangeEmailProvider extends ServiceProvider
- {
- protected $defer = false;
- public function register()
- {
- $this->app->bind('AppContractsAuthChangeEmailContract', function ($app) {
- return new AppServicesAuthChangeEmailService(
- $app -> make("AppContractsAuthChangeEmailRepositoryContract")
- );
- });
- }
- public function provides()
- {
- return ['AppContractsAuthChangeEmailContract'];
- }
- public function boot()
- {
- }
- }
- namespace AppProvidersAuth;
- use IlluminateSupportServiceProvider;
- class ChangeEmailRepositoryProvider extends ServiceProvider
- {
- protected $defer = false;
- public function register()
- {
- $this->app->bind('AppContractsAuthChangeEmailRepositoryContract', function ($app) {
- return new AppRepositoriesAuthChangeEmailRepository();
- });
- }
- public function provides()
- {
- return ['AppContractsAuthChangeEmailRepositoryContract'];
- }
- public function boot()
- {
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement