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 协议》,转载必须注明作者和本文链接
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!