19
Laravel 工作坊 使用者認證 shengyou @ 彰師大資工系學會 (2014.12.14)

使用者認證

Embed Size (px)

Citation preview

Page 1: 使用者認證

Laravel 工作坊使用者認證

shengyou @ 彰師大資工系學會 (2014.12.14)

Page 2: 使用者認證

階段任務• 了解 Laravel 的使用者認證機制

• 為專案應用程式增加使用者認證

Page 3: 使用者認證

使用者認證

Page 4: 使用者認證

Laravel 的認證工具• Laravel 原生就有內建認證類別 Auth;在專案啟動時,就已經帶有 User Model;而在

artisan 指令內,也已經提供產生重設密碼相關機制的指令

• 不過, App 本身要怎麼實作認證機制,則留給開發人員自行決定

★ 官方文件:http://laravel.tw/docs/4.2/security

Page 5: 使用者認證

App 的認證機制• 註冊/帳號啟動機制 (Email)

• 登入/登出

• 忘記密碼/重設密碼

• 重寄認證信P.S  本次工作坊僅示範如何實作登入/登出的功能

Page 6: 使用者認證

實作使用者認證

Page 7: 使用者認證

登入/登出機制

AuthController@index

登入表單

AuthController@process

驗證資訊

清除登入資訊任一頁面點擊登出按鈕

AuthController@logout

返回首頁

返回首頁

登入機制

登出機制

Page 8: 使用者認證

實作內容• 實作一個 users 資料表,裡面儲存使用者帳號、密碼及 remember token,並準備

UserTableSeeder,至少設定一組帳密• 實作 AuthController 處理登入/登出動作• 實作登入頁、各 Views 上登入/登出狀態的判斷機制

• 設定 Route

Page 9: 使用者認證

產生 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();}

Page 10: 使用者認證

產生帳號• 新增 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}’),        ]);}

Page 11: 使用者認證

顯示登入表單• 若使用者還末登入,顯示登入表單填寫帳號及密碼//  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()

Page 12: 使用者認證

驗證登入資訊• 在 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',  '成功登入');}

Page 13: 使用者認證

處理登出動作• 將登入的使用者登出,動作完成後回到首頁,並顯示成功提示//  app/controllers/AuthController.phppublic  function  logout(){   Auth::logout();     return  Redirect::route('home.index')                                      -­‐>with('success',  '已成功登出');}

Page 14: 使用者認證

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

Page 15: 使用者認證

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(){});

Page 16: 使用者認證

試試看• 在本次的範例內,只有簡單的實作使用者登入/登出的功能。花點時間查詢一下官方文件,試著增加以下幾個功能:

- 使用者註冊 > 帳號啟動

- 忘記密碼 > 密碼重設

Page 17: 使用者認證

階段檢查表• 確認專案已完成前述提及的使用者認證機制 4 個部份的動作,包括:

- DB migrate、seeding

- Views 更新

- 實作 Controller 動作

- Route 設定

Page 18: 使用者認證

問與答學員可開始練習、實作

Page 19: 使用者認證

單元小結• 在這個單元裡,我們說明學習如何使用

Laravel 的認證元件來實作登入、登出功能

• 下一個單元,我們將學習把實作完成的應用程式佈署至 PaaS 平台上,讓此應用程式上線!