Authentication
File:
packages/skilldo/framework/src/Support/Auth.phpNamespace:
SkillDo\Support\Auth
1. Auth là gì?
Authentication (Xác thực) là quá trình hệ thống nhận diện việc người dùng tiến hành đăng nhập, kiểm tra thông tin tài khoản hợp lệ, ghi nhớ session, cookies và trả về các thông tin đối tư ợng User đang thao tác.
Class SkillDo\Support\Auth của nền tảng cung cấp một tập hợp các phương thức tĩnh (Facade-like) vô cùng thân thiện giúp bạn thao tác với thông tin của người dùng hiện hành nhanh chóng mà không cần phải gọi qua DB liên tục, vì dữ liệu có cơ chế Cache & Session tối ưu.
2. Cách Gọi Thường Dùng
Vì các method của Auth được khai báo là tĩnh (static), bạn có thể gọi trực tiếp ở bất kỳ tệp Model, Controller, View hay Helper nào.
Ví dụ:
use SkillDo\Support\Auth;
if (Auth::check())
{
$userName = Auth::user()->username;
$userId = Auth::id();
}
3. Danh Sách Phương Thức
3.1 Xác thực người dùng
Auth::check
Method Auth::check Kiểm tra user đã đăng nhập hệ thống hay chưa nếu đã đăng nhập kết quả sẽ là true ngược lại là false
$isLogin = Auth::check()
Auth::user
Method Auth::user trả thông tin user đang đăng nhập nếu không có user đăng nhập method trả về một mãng rỗng
$user = Auth::user()
Auth::id
Method Auth::id trả id user đang đăng nhập nếu không có user đăng nhập method trả về 0
$userId = Auth::id();
Auth::login
Method Auth::login đăng nhập user được chỉ định vào hệ thống. Thành công trả về object User, thất bại trả về SKD_Error.
| Credentials Key | Type | Description |
|---|---|---|
| username | string |
|
| password | string | mật khẩu |
$credentials = [
'username' => 'my_username',
'password' => 'my_password',
]
$loginResult = Auth::login($credentials);
if(!is_skd_error($loginResult))
{
echo "login successful"
}
else
{
echo $loginResult->first();
}
Nếu gọi
Auth::login()không truyền$credentials, hệ thống tự lấyusername/passwordtừ request hiện tại. Trong quá trình login các hook sau được phát: filterauthenticate($user, $username, $password — trả về SKD_Error để chặn), actionskd_login(thành công) vàskd_login_failed(thất bại). User cóstatuskhácpublic(pending/block) sẽ bị từ chối đăng nhập.
Auth::logout
Method Auth::logout tiền hành đăng xuất user hiện đang đăng nhập trong hệ thống (xóa session user, xóa cookie user_login, phát action user_logout)
Auth::logout();
Auth::setCookie
Method Auth::setCookie thiết lập phiên đăng nhập cho user được truyền vào: ghi cookie user_login (chứa username + remember_token, được ký HMAC-SHA256), ghi session và bind user vào container (app('user')). Dùng để đăng nhập user bằng code, hoặc làm mới thông tin user đang đăng nhập sau khi thay đổi dữ liệu
$user = Auth::user();
$user->firstname = 'Elon';
$user->lastname = 'Mệt';
$user->save();
Auth::setCookie($user); // app('user') từ giờ trả về thông tin mới
Auth::setCurrent
Method Auth::setCurrent đăng nhập trực tiếp một user object vào hệ thống không cần mật khẩu (kiểm tra status phải là public, sau đó gọi setCookie và phát action skd_login). Thành công trả về user, thất bại trả về SKD_Error
$user = \User::find(1);
$result = Auth::setCurrent($user);
if(!is_skd_error($result)) {
echo "login successful";
}
Auth::generatePassword
Method Auth::generatePassword tạo chuỗi hash mật khẩu bằng password_hash() — ưu tiên Argon2ID, fallback Bcrypt. Tham số $salt thứ 2 chỉ giữ lại để tương thích code cũ và không còn được sử dụng
$user = Auth::user();
$user->password = Auth::generatePassword('new_password');
$user->save();
Auth::passwordConfirm
Method Auth::passwordConfirm kiểm tra mật khẩu nhập vào có khớp với mật khẩu của user hay không. Tham số $user có thể bỏ trống — mặc định là user đang đăng nhập. Mật khẩu legacy (MD5 + salt) vẫn xác thực được và sẽ tự động migrate lên Argon2ID/Bcrypt sau lần xác thực thành công
$passwordConfirm = Auth::passwordConfirm('my_password', $user);
if($passwordConfirm)
{
echo "Password is correct";
}
else
{
echo "Password is incorrect";
}
Auth::loginByRemember
Method Auth::loginByRemember tự động đăng nhập lại user từ cookie user_login (remember token) nếu session đã hết hạn. Không áp dụng cho user root
Auth::loginByRemember();
3.2 Phân quyền người dùng
Auth::hasCap
Method Auth::hasCap kiểm tra user đang đăng nhập có quyền sử dụng chức năng không, nếu có quyền trả về true ngược lại là false
if(Auth::hasCap('edit_post')) {
//permission successfully
}
Auth::getCap
Method Auth::getCap trả về các quyền user đang đăng nhập có thể sử dụng
dd(Auth::getCap())
/**
"loggin_admin" => true
"switch_themes" => true
"edit_themes" => true
...
*/
Auth::getRole
Method Auth::getRole trả về key nhóm (chức vụ) của user đang đăng nhập
dd(Auth::getRole())
//["customer"]
Auth::getRoleName
Method Auth::getRoleName trả về tên nhóm (chức vụ) của user đang đăng nhập
dd(Auth::getRoleName())
//Khách hàng
Auth::setRole
Method Auth::setRole set user đang đăng nhập vào nhóm (chức vụ) mới (thay thế toàn bộ role hiện có, phát action set_user_role)
dd(Auth::setRole('administrator'))
Auth::addRole
Method Auth::addRole gán thêm một nhóm (chức vụ) cho user đang đăng nhập (giữ lại các role cũ)
Auth::addRole('seller');
Auth::isSupper
Method Auth::isSupper kiểm tra user đang đăng nhập có phải super admin hay không (dựa trên capability delete_users)
if(Auth::isSupper()) {
// User có quyền cao nhất
}