Upload
shengyou-fan
View
4.919
Download
3
Embed Size (px)
Citation preview
Laravel 工作坊使用者認證
shengyou @ 彰師大資工系學會 (2014.12.14)
階段任務• 了解 Laravel 的使用者認證機制
• 為專案應用程式增加使用者認證
使用者認證
Laravel 的認證工具• Laravel 原生就有內建認證類別 Auth;在專案啟動時,就已經帶有 User Model;而在
artisan 指令內,也已經提供產生重設密碼相關機制的指令
• 不過, App 本身要怎麼實作認證機制,則留給開發人員自行決定
★ 官方文件:http://laravel.tw/docs/4.2/security
App 的認證機制• 註冊/帳號啟動機制 (Email)
• 登入/登出
• 忘記密碼/重設密碼
• 重寄認證信P.S 本次工作坊僅示範如何實作登入/登出的功能
實作使用者認證
登入/登出機制
AuthController@index
登入表單
AuthController@process
驗證資訊
清除登入資訊任一頁面點擊登出按鈕
AuthController@logout
返回首頁
返回首頁
登入機制
登出機制
實作內容• 實作一個 users 資料表,裡面儲存使用者帳號、密碼及 remember token,並準備
UserTableSeeder,至少設定一組帳密• 實作 AuthController 處理登入/登出動作• 實作登入頁、各 Views 上登入/登出狀態的判斷機制
• 設定 Route
產生 users 資料表• 用 artisan 指令建立一個 Migration 來產生
users 資料表,在 users 資料表內,至少要有帳號、密碼及 remember token 三欄位// app/databases/migrations/create_users_table.phpSchema::create(‘users’, function(Blueprint $table){ $table-‐>increments(‘id’); $table-‐>string(‘username’)-‐>unique(); $table-‐>string(‘password’); $table-‐>rememberToken(); $table-‐>timestamps();}
產生帳號• 新增 UserTableSeeder,並在裡面設定一組帳號/密碼
P.S 記得在 DatabaseSeeder 裡開啟 UserTableSeeder,並執行 db:seed
// app/databases/seeds/UserTableSeeder.phppublic function run(){ DB::table(‘users’)-‐>truncate(); User::create([ ‘username’ => ‘{username}’, ‘password’ => Hash::make(‘{password}’), ]);}
顯示登入表單• 若使用者還末登入,顯示登入表單填寫帳號及密碼// app/views/login/index.blade.phpForm::open(['route' => 'auth.process', 'method' => 'POST', 'class' => 'form-‐signin', 'role' => 'form'])
Form::text('username', null, ['class' => 'form-‐control', 'placeholder' => '請輸入您的帳號', 'required', 'autofocus'])
Form::password('password', ['class' => 'form-‐control', 'placeholder' => '請輸入您的密碼', 'required'])
Form::submit('登入', ['class' => 'btn btn-‐lg btn-‐primary btn-‐block'])
Form::close()
驗證登入資訊• 在 AuthController 裡接收登入資訊並驗證,假如成功的話就導回首頁,不成功的話就返回登入頁// app/controllers/AuthController.phpif (Auth::attempt(['username' => Input::get('username'), 'password' => Input::get('password')], Input::get('remember-‐me'))){ return Redirect::route('home.index')-‐>with('success', '成功登入');}
處理登出動作• 將登入的使用者登出,動作完成後回到首頁,並顯示成功提示// app/controllers/AuthController.phppublic function logout(){ Auth::logout(); return Redirect::route('home.index') -‐>with('success', '已成功登出');}
View 相關判斷• 原本在 View 上面寫的 @if 判斷,改成真正的登入判斷// app/views/partials/sidebar.blade.php<h4>網站管理</h4>@if (Auth::check())<p><span class="label label-‐success">管理中</span> <a
href="{{ route('auth.logout') }}">登出</a></p>@else<p><a href="{{ route('auth.login') }}">登入</a></p>@endif
Route 設定• 將只提供給管理者用的 Route 組合成
group,並對該 group 加上 auth filter 以確認這些 route 僅能登入後使用// app/routes.php// 增加登入處理的 RouteRoute::post('login/process', ['as' => 'auth.process' , 'uses' => 'AuthController@process']);Route::get('logout', ['as' => 'auth.logout' , 'uses' => 'AuthController@logout']);
// 僅有管理者登入後才可以使用的 Route 放在 group 裡Route::group(array('before' => 'auth'), function(){});
試試看• 在本次的範例內,只有簡單的實作使用者登入/登出的功能。花點時間查詢一下官方文件,試著增加以下幾個功能:
- 使用者註冊 > 帳號啟動
- 忘記密碼 > 密碼重設
階段檢查表• 確認專案已完成前述提及的使用者認證機制 4 個部份的動作,包括:
- DB migrate、seeding
- Views 更新
- 實作 Controller 動作
- Route 設定
問與答學員可開始練習、實作
單元小結• 在這個單元裡,我們說明學習如何使用
Laravel 的認證元件來實作登入、登出功能
• 下一個單元,我們將學習把實作完成的應用程式佈署至 PaaS 平台上,讓此應用程式上線!