# 認證登入(Auth)
### 設定
Laravel 內建認證的設定檔案放在 `config/auth.php` 中,預設會使用 `App\User` 的類別當作驗證的 Eloquent 模型
~~~
[
'model' => App\User::class,
]
~~~
如果我們用[Model 模型設計模式](#)去設計我們的程式架構,我們 User 實體模型的程式可能會放在 `App\KeJyunApp\User\Entities\User.php` 中,這時候我們的認證模型設定可以設定成像這樣(依照命名空間去設定):
~~~
[
'model' => App\KeJyunApp\User\Entities\User::class,
]
~~~
這樣 Laravel 內建的認證就可以用我們指定的實體模型去進行認證了!!
### 手動登入認證
Laravel 內建的認證使用 Auth 去進行身份認證,如果我們要用使用者的「email」及「密碼」做登入,我們的登入程式可能會像:
~~~
$email = 'kejyun@gmail.com';
$password = '1234';
if (Auth::attempt(['email' => $email, 'password' => $password]))
{
// 已登入成功!!!
}
~~~
使用 `Auth:attempt()` 的方式去驗證使用者時,Laravel 會先到 User 資料表透過 Email 抓取使用者的資料,產生出來的 SQL 會像:
~~~
SELECT * FROM "users" WHERE "email" = 'kejyun@gmail.com' LIMIT 1;
~~~
抓取完使用者之料後再將 password 欄位用[雜湊](#)的 `Hash::check()` 方式去比對驗證密碼是否正確,再記錄使用者的 SESSION 資料
如果我們的使用者有限制啟用帳號的人才可以登入,所以我們要用使用者的「email」、「密碼」及「啟用狀態」做登入,我們的登入程式可能會像:
~~~
$email = 'kejyun@gmail.com';
$password = '1234';
$status = 'active';
if (Auth::attempt(['email' => $email, 'password' => $password, 'status' => $status]))
{
// 已登入成功!!!
}
~~~
產生出來的 SQL 會像:
~~~
SELECT * FROM "users" WHERE "email" = 'kejyun@gmail.com' AND "status" = 'active' LIMIT 1;
~~~
Laravel 一樣是先抓取使用者資料後,再做密碼驗證的動作!
### 使用記住我的方式登入
~~~
$email = 'kejyun@gmail.com';
$password = '1234';
$remember_me = true;
if (Auth::attempt(['email' => $email, 'password' => $password], $remember_me))
{
// 已使用記住我登入成功!!!
}
~~~
> 如果你是自己建立自己 User 資料表的 Migration,記得在自己的 Migration 中加入 `$table->rememberToken();` 的設定,加入 `remember_token` 欄位,這個欄位可以讓 Laravel 使用 `記住我` 的方式去記住使用者的 session token
### 判斷使用者是否已登入
我們可以使用 `Auth::check()` 的方式,判斷使用者是否已登入
~~~
if (Auth::check()) {
// 已登入
}
~~~
### 取得登入使用者的物件
~~~
$user = Auth::user();
// KeJyun
var_dump($user->name);
~~~
### 使用特定使用者的 ID 登入
~~~
$user_id = '1';
Auth::loginUsingId($user_id);
~~~
### 登出
~~~
Auth::logout();
~~~
### 參考資料
- [認證 - Laravel.tw](http://laravel.tw/docs/5.0/authentication)
- 介紹
- 環境
- .env 檔案
- 資料庫
- Migration (遷移)
- Eloquent Model (模型)
- 設定
- 關聯
- 魔術函式
- 使用 Eloquent
- 常見問題
- 無法取得查詢 Log
- 使用大量資料的方式新增時無法新增
- 使用中繼模型繼承 Eloquent 模型造成無法使用大量資料新增
- PostgreSQL
- 安裝 PostgreSQL ODBC driver
- HTTP
- 請求
- 中介層 (Middleware)
- 視圖 (View)
- 服務
- 認證登入(Auth)
- 郵件(Mail)
- 使用 Gmail 寄信
- 使用 Mailgun 寄信
- 隊列(Queue)
- database
- 非同步(async)
- 輔助方法 (Helpers)
- 自定義輔助方法
- 單元測試 (Unit Test)
- Post CSRF 錯誤
- 錯誤與日誌
- 在單元測試顯示例外
- 日誌記錄層級
- 日誌巨集
- 加密
- 雜湊
- Elixir
- 使用 Elixir 合併 CSS 與 JS
- 設計模式
- 服務容器
- PSR
- Model 模型
- 學習資源
- 套件
- Debug
- Artisan tail
- 工具
- Carbon
- 設計模式
- 其他常見問題
- Call to undefined method getCachedCompilePath()
- 變更專案目錄名稱導致 View 無法讀取
- Laravel 5.1 目錄結構異動
- 學習資源
- 官方
- 社群
- 會議議程
- 工作
- 文件
- 文章
- 套件
- 服務工具
- 教學影片
- 教學網站
- 編輯開發
- 主機
- 成功案例