sanctum SPA认证,登录逻辑怎么写?
我想在公众号用户授权登录获取到用户信息后,设置sanctum的登录态,
下面这样写是正确的吗?
- 公众号用户模型
<?php
namespace Modules\Wechat\Models;
use Illuminate\Foundation\Auth\User as Authenticatable;
class OfficialAccountUser extends Authenticatable
{
protected $casts = [
'origin' => 'object',
];
}
- 登录逻辑
use Modules\Wechat\Models\OfficialAccountUser;
class OfficialAccountController extends Controller
{
/**
* 公众号网页授权,通过code获取用户信息
*/
public function login(Request $request)
{
//前面的步骤省略,这里是公众号接口获取到的用户数据
$userInfo = ['openid'=>'12345','nickname'='hahaha'];
$officialAccountUser = OfficialAccountUser::create($userInfo);
Auth::guard('sanctum')->login($officialAccountUser);
}
Auth::guard('sanctum')
得到的是 Illuminate\Auth\RequestGuard,其中并没有login()
方法,实际上如果想要使用 sanctum 来为 spa 提供身份,那么我们还是应该用web guard
,参考文档。接下来,我们可以使用
Auth::guard('web')
或者Auth::guard()
都可以得到 web guard(如果不传参数,laravel 会默认去config/auth.php
找到默认值'guard' => 'web'
),返回的是一个 Illuminate\Auth\SessionGuard,然后调用 login 方法即可登录,该方法会要求你传入一个实现了 Authenticatable 接口的实例(laravel 默认会把 user 实现该接口)。那么,针对你的问题,伪代码可以这样写。