2015-04-08 5 views
0

Я использую Laravel 5 для создания пользовательских материалов с помощью Entrust для ролей пользователей и разрешений. У меня есть две роли, которые являются администраторами и пользователями. В основном, я хочу, чтобы у вас было два разных забытых пароля для электронной почты - один для пользователей и один для администраторов. Поэтому, когда пользователь вводит свой адрес электронной почты, чтобы получить ссылку на сброс, отправленную по электронной почте, мне нужно сначала проверить, какой пользователь он первым, а затем отправить им правильный шаблон. Я не хочу делать какие-либо хакерские вещи в стандартном шаблоне электронной почты, это должен быть способ сделать это в контроллере или что-то в этом уверенном смысле? Кто-нибудь знает, как я это сделаю?Laravel 5 забытый пароль состояние шаблона электронной почты

ответ

1

Вы можете, вероятно, побудит их войти в их электронную почту и, когда они подают вы можете захватить его в контроллере:

public function forgot() 
{ 
    $email = Input::get('email'); 
    $user = User::where('email', $email)->first(); 

    if($user->type == 'admin') { 
     // logic to email admin with admin template 
    } else { 
     // logic to email user with user template 
    } 

    // redirect to success page letting user know the email was sent 
    return View::make('someview'); 
} 

Или еще лучше, просто передать тип пользователя для службы электронной почты, который обрабатывает электронной почтой:

public function forgot() 
{ 
    $email = Input::get('email'); 
    $user = User::where('email', $email)->first(); 

    $emailService->sendForgotForType($user->type); 

    // redirect to success page letting user know the email was sent 
    return View::make('someview'); 
} 

Если вы используете Laravel 5 встроенных в Управление пользователями:

Чтобы переопределить defau lt, вам необходимо вручную установить $emailView в PasswordBroker.php, написав новый класс, который расширяет PasswordBroker.

Например, закомментируйте 'Illuminate\Auth\Passwords\PasswordResetServiceProvider' в конфиге/app.php

Затем создать класс расширения:

use Illuminate\Contracts\Auth\PasswordBroker; 
use Illuminate\Contracts\Auth\CanResetPassword; 

class MyPasswordBroker extends PasswordBroker { 

    // override 
    public function emailResetLink(CanResetPasswordContract $user, $token, Closure $callback = null) 
    { 
     // Override Logic to email reset link function perhaps using the example above? 
    } 
} 

Затем вам нужно будет связать свой новый MyPasswordBroker класс к AppServiceProvider в app/Providers/AppServiceProvider.php в реестре метод (ниже найдено в Интернете):

$this->app->bind('App\Model\PasswordBroker', function($app) { 
    $key = $app['config']['app.key']; 
    $userToken = new \App\Model\NewUserToken; 
    $tokens = new \App\Repository\NewTokenRepository($key,$userToken); 
    $user = new \App\Model\NewUser; 
    $view = $app['config']['auth.password.email']; 
    return new \App\Model\PasswordBroker($tokens, $users, $app['mailer'], $view); 
}); 

Определенно умеренно продвигается d, если вы справитесь с этим - отлично. В противном случае я, возможно, изучу использование пакета проверки подлинности со встроенными функциями, которые вам нужны.

+0

Но где контроллер, который обрабатывает это? – geoffs3310

+0

Ну, вам нужно создать маршрут и контроллер, чтобы это сделать. доверять не все, что встроено. Похоже, вам, возможно, нужно немного почитать немного Laravel? –

+0

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

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