Laravel 自身的web認證路由預設包括登入、註冊和密碼重置,除了登入之外,其它都是可以根據需求選擇要還是不要,很靈活。
預設生成的web認證路由
Auth::routes();
需要郵箱驗證的
Auth::routes(['verify' => true]);
不需要註冊功能
Auth::routes(['register' => false]);`
不需要重置密碼
Auth::routes(['reset' => false]);
登入成功以後,預設跳轉至 /home
路徑下,可以通過新增下面的方法,來修改預設跳轉路徑:
protected function redirectTo()
{
return '/test';
}
當然也可以修改 App\Providers\RouteServiceProvider
類中的 HOME 常量:
public const HOME = '/test';
獲取登入成功以後的資訊
// 獲取登入使用者例項
$user = Auth::user();
$user = auth()->user();
// use Illuminate\Http\Request;
$user = $request->user();
// 獲取登入使用者id
$id = Auth::id();
$id = auth()->id()
// 驗證使用者是否已登入,適合使用中介軟體驗證
if(Auth::check()) {
// 已登入
}
新增認證條件
Route::get('profile', function () {
// 只有認證使用者才可以進來
})->middleware('auth');
// 或者在控制器中的建構函式中指定
// 執行該控制器中所有的動作必須都是經過認證的使用者
public function __construct()
{
$this->middleware('auth');
}
// 執行該控制器中除了index和show之外的動作必須都是經過認證的使用者
public function __construct()
{
$this->middleware('auth')->except(['index', 'show']);
// 或者
// $this->middleware('auth', ['except' => ['index', 'show]]);
}
// 執行該控制器中edit和update動作必須是經過認證的使用者
public function __construct()
{
$this->middleware('auth')->only(['edit', 'update']);
// 或者
// $this->middleware('auth', ['only' => ['edit', 'update]]);
}
登出
Auth::logout();
手動認證使用者
// 當不想用自帶的控制器去認證使用者,可以自己手動認證
use Illuminate\Http\Request;
use Auth;
class LoginController extends Controller
{
public function authenticate(Request $request)
{
$credentials = $request->only('email', 'password);
if(Auth::attempt($credentials)) {
// Authentication passed ...
}
}
}
// Route::post('/authenticate', 'Auth\LoginController@authenticate');
if(Auth::attempt(['email' => $email, 'password' => $password, 'active' => 1])) {
// 欄位 active 必須是 1
}
記住使用者
// $remember 是個 bool 值
if (Auth::attempt(['email' => $email, 'password' => $password], $remember)) {
// the user is being remember... 內建的 LoginController 已實現 remember
}
Auth::login($user);
Auth::login($user, true); // 記住使用者
Auth::loginUsingId(1);
Auth::loginUsingId(1, true); // 記住使用者
Auth::once($credentials); // 臨時認證, 無狀態的
無登入頁面,利用彈窗請求認證使用者
// auth.basic 中介軟體,訪問需要認證的路有時候,如果還未認證,則瀏覽器會彈出一個登入認證的彈窗
Route::get('profile', function() {
dump(auth()->user());
})->middleware('auth.basic');
單裝置登入
// 取消登入在別的裝置上的認證
// 實現:
// 在 App\Http\Kernel::class 中取消註釋: \Illuminate\Session\Middleware\AuthenticateSession::class,
Route::get('/out', function () {
Auth::logoutOtherDevices($password); // 傳入當前登入使用者的密碼 123456
})->middleware('auth');
本作品採用《CC 協議》,轉載必須註明作者和本文連結