Laravel Web 认证
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 协议》,转载必须注明作者和本文链接
推荐文章: