菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
99
0

Laravel Web 认证

原创
05/13 14:22
阅读数 440

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 协议》,转载必须注明作者和本文链接

发表评论

0/200
99 点赞
0 评论
收藏
为你推荐 换一批