:::
17-1 使用新北市OpenID登入
- 先開啟
\專案\resources\views\layouts\nav.blade.php,加入登入選項:<li class="nav-item"> <form action="/auth/login/openid" method="post" style="display:inline"> @csrf <button class="btn btn-link">OpenID 登入</button> </form> </li> - 建立控制器:
php artisan make:controller OpenIDController - 編輯OpenID控制器
\專案\app\Http\Controllers\OpenIDController.php:<?php namespace App\Http\Controllers; use Backpack\Base\app\Models\BackpackUser; use Illuminate\Support\Facades\Auth; class OpenIDController extends Controller { public function ntpcopenid() { $openid = app('ntpcopenid'); return redirect($openid->authUrl()); } public function get_ntpcopenid() { $openid = app('ntpcopenid'); switch ($openid->mode) { case 'cancel': // 取消授權 return 'User Canceled'; break; case 'id_res': // 同意授權 if (!$openid->validate()) { // 驗證未過 // 導向至登入畫面 return redirect('auth/login'); } // 驗證通過,檢查是否允許登入 if ($openid->canLogin()) { // 允許登入 // 取得 user data 陣列 $data = $openid->getUserData('*'); //搜尋使用者是否存在,沒有就新增 $user = BackpackUser::firstOrNew(['name' => $data['namePerson']]); $user->email = $data['contact/email']; $user->password = password_hash($user->email, PASSWORD_DEFAULT); // 註冊使⽤用者 if (!$user->exists) { $user->save(); if ($data['pref/timezone'][0]['role']) { $user->assignRole('學生'); } } // 登⼊入使⽤用者 Auth::login($user); // 將取得的資料,轉成陣列存入session中 session($data); } // 不允許登入,例如導回登入頁面或顯示訊息 return redirect('/'); break; default: // 其他,如直接輸入網址瀏覽 return redirect('/'); break; } } } - 編輯路由
\專案\routes\web.php:// 處理表單,導向至 NTPC OpenID 登入 Route::post('auth/login/openid', 'OpenIDController@ntpcopenid')->name('ntpcopenid'); // OpenID 導回 Route::get('auth/login/openid', 'OpenIDController@get_ntpcopenid')->name('get_ntpcopenid');
17. 安裝設定新北市OpenID登入