2014-07-22 89 views
0

可以通過管理員面板創建用戶,無需密碼?我想遵循的程序:Cartalyst Sentry和註冊用戶

  • 管理員創建無密碼用戶
  • 獲得用戶電子郵件指令輸入密碼並激活帳戶
  • 用戶可以用電子郵件註冊和他的密碼

回答

1

我不你是這麼認爲的。這就是爲什麼當我創建我的用戶時,我生成一個隨機密碼。

$ user-> password = str_shuffle(「Random_Password」); //生成隨機初始密碼

+0

是啊,也許這是最好的解決辦法,但我問:) – Kolesar

0

我之前通過黑客篡改了Laravel的「忘記密碼」功能(而不是重新發明輪子)。我不能說有多好這個融入哨兵但它是非常容易的做到在普通的舊Laravel:

  1. 創建一個空密碼
  2. 用戶手動添加一個條目的密碼提示表(唐不會使用Auth ::提醒或任何它,因爲它會發送電子郵件,但請使用該類的代碼生成令牌)
  3. 發送歡迎電子郵件給用戶,並鏈接到/ user/confirm(或任何,重點是它不必是/用戶/忘記密碼),並以正常的方式掛鉤該路由爲忘記密碼添加檢查$ user->密碼=='',如果你想確保只有未經證實的人可以去那個頁面(並不是真的無聊TER值)。

您可能還希望擴大在忘記密碼的超時,或者像我一樣(正確哈克,我知道),當用戶在/user/confirm版本被遺忘的密碼功能,只需刷新超時的表在通過Laravel的驗證系統進行檢查之前。

我們的代碼是這樣的:

上註冊:

// however you register the user: 
$user = new User; 
$user->email = Input::get('email'); 
$user->password = ''; 
$user->save(); 

// create a reminder entry for the user 
$reminderRepo = App::make('auth.reminder.repository'); 
$reminderRepo->create($user); 

Mail::send(
    'emails.registered', 
    [ 
     'token' => $reminder->token, 
    ], 
    function ($message) use ($user) { 
     $message->to($user->email)->setSubject(Lang::get('account.email.registered.subject', ['name' => $user->name])); 
    } 
); 

現在確認鏈接:

class AccountController extends Controller 
{ 
    public function confirm($token) 
    { 
     $reminder = DB::table('password_reminders')->whereToken($token)->first(); 

     if (! $reminder) { 
      App::abort(404); 
     } 

     // reset reminder date to now to keep it fresh 
     DB::table('password_reminders')->whereToken($token)->update(['created_at' => Carbon\Carbon::now()]); 

     // send token to view but also email so they don't have to type it in (with password reminders it's is a good thing to make users type it, but with confirm account it feels weird) 
     return View::make('account.confirm-account')->withToken($token)->withEmail($reminder->email); 
    } 

    public function postConfirm($token) 
    { 
     $credentials = Input::only('email', 'password', 'password_confirmation', 'token'); 

     $response = Password::reset($credentials, function ($user, $password) { 
      $user->password = $password; 
      $user->save(); 
     }); 

     switch ($response) { 
      case Password::INVALID_PASSWORD: 
      case Password::INVALID_TOKEN: 
      case Password::INVALID_USER: 
       return Redirect::back()->withInput()->with('message-error', Lang::get($response)); 

      case Password::PASSWORD_RESET: 
       Auth::login(User::whereEmail(Input::get('email'))->first()); 
       return Redirect::route('account.home')->with('message-info', Lang::get('messages.confirm_account.succeeded')); 
    } 
}