sanctum SPA认证,登录逻辑怎么写?

我想在公众号用户授权登录获取到用户信息后,设置sanctum的登录态,
下面这样写是正确的吗?

  1. 公众号用户模型
<?php

namespace Modules\Wechat\Models;

use Illuminate\Foundation\Auth\User as Authenticatable;

class OfficialAccountUser extends Authenticatable
{
   protected $casts = [
        'origin'  => 'object',
    ];
}
  1. 登录逻辑
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);
    }
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
最佳答案

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 实现该接口)。

file

那么,针对你的问题,伪代码可以这样写。

$officialAccountUser = OfficialAccountUser::create($userInfo);
$user = $officialAccountUser->user; // 假设你定了关联关系
Auth::guard()->login($user);
2年前 评论
williamQian (楼主) 2年前
讨论数量: 6

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 实现该接口)。

file

那么,针对你的问题,伪代码可以这样写。

$officialAccountUser = OfficialAccountUser::create($userInfo);
$user = $officialAccountUser->user; // 假设你定了关联关系
Auth::guard()->login($user);
2年前 评论
williamQian (楼主) 2年前

如果是api的话

class User extends Authenticatable
{
    use HasApiTokens;
}
$token = $user->createToken('app', ['app'])->plainTextToken;
2年前 评论
williamQian (楼主) 2年前
周小云 2年前
周小云 2年前

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