无法使用loginUsingId()登录

根据需求,除了正常的账号密码登录外, 项目又加了一个企业微信扫码登录
企业微信扫码成功后可以找到账号的信息, 因为无法解密 密码, 所以想用非密码登录. 找到两个方法$this->guard()->loginUsingId($id) 和 $this->guard()->login($user)

1.loginUsingId()
$login_res=$this->guard()->loginUsingId($user->id);,
//$check_res=Auth::check();
//$login_res账号信息,不需要,$check_res等于false; 
代码修改如下
$check_res=$this->guard()->check();
$login_res账号信息,$check_res等于true; 
2.login()
$wxid='';企业微信扫码确认得到的参值;
$user=admin_users::where('wxid',$wxid)->first();
$login_res=$this->guard()->login($user);

直接报错

无法使用loginUsingId()登录

2的代码修改如下
$wxid='';企业微信扫码确认得到的参值;
$user=users::where('wxid',$wxid)->first();//$table='admin_users';
$login_res=$this->guard()->login($user);
不再报错
$login_res等于null,$check_res等于true; 

整体代码如下

namespace App\Admin\Controllers;
use App\help\Helpers;
use App\Models\admin_users;
use App\Models\Staff;
use Encore\Admin\Controllers\AuthController as BaseAuthController;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class AuthController extends BaseAuthController
{
    /**
     * @param \Illuminate\Http\Request $request
     */
    public function qywx(Request $request){
        $params=request()->input();
        if(!isset($params['code'])||empty($params['code'])){//未授权,页面不变
        }
        if(!isset($params['state'])||$params['state']!==config('app.qywx')['login']['state']){//携带的参数不对

        }
        $qywx=config('app.qywx');//企业微信的相关参数
        $token_res=Helpers::qy_access_token($qywx['login']['corpsecret'],$qywx['login']['agentid']);
        if(!isset($token_res['code'])||$token_res['code']!=1){
            return ['message'=>'未获取到授权密令','code'=>100];
        }
        $token=$token_res['data'];
        $url=$qywx['getuserinfo'].'?access_token='.$token.'&code='.$params['code'];
        $res=Helpers::request($url);
        $res['UserId']=$res['userid'];

//        $user=admin_users::whereNull('is_quit')->where('wxid',$res['UserId'])->first();换成如下
        $user=users::whereNull('is_quit')->where('wxid',$res['UserId'])->first();//$table='admin_users';

        if(!isset($staff['user_id'])){
            return ['message'=>'还未注册账号','code'=>100];
        }
//        $login_res=Admin::guard()->loginUsingId($user->id,true);
        $login_res=$this->guard()->loginUsingId($user->id);
//        $login_res=$this->guard()->login($user);

        return [$login_res,$this->guard()->check()];
        return [$res,$login_res];
    }
}

其他关于auth的配置没变
我查过其他文档, 就说用loginUsingId()就可以了,

===================================
代码修改后,$this->guard()->check()返回true,但还是无法进入网站首页,没有生成登录token

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
最佳答案

竟然是因为中间件, 我虽然是继承原控制器写的扫码登录,但路由写在非认证 常规路由分组里,应该与原登录路由的中间件保持一致 file

2年前 评论
讨论数量: 3
aab

感觉这个提示很清晰了,要求传入一个实现了 Illuminate\Contracts\Auth\Authenticatable 接口的对象,可能是因为你的对象 admin_users 没有实现相关的接口

2年前 评论
wenreal (楼主) 2年前

admin_users要继承Illuminate\Foundation\Auth\User 至于第一个,看看你配置guards web 模型有没有你的用户,我估计还是admin_users

2年前 评论
wenreal (楼主) 2年前

竟然是因为中间件, 我虽然是继承原控制器写的扫码登录,但路由写在非认证 常规路由分组里,应该与原登录路由的中间件保持一致 file

2年前 评论

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