改造laravel的登录流程,仅使用一个token登录laravel

背景:最近使用lavavel来改造目前的系统,但是之前的老系统还不能立马下线,这时就出现了双系统共存的状态,需要解决的一个问题就是一次登录2个系统。

第一步

修改中间件App\Http\Middleware\Authenticate(红色部分为新增的内容)

public function handle($request, Closure $next, $guard = null)
    {
        if($request->has("iToken"))
        {
            $this->login($request);

            $request->query->remove("iToken");
        }
        if (Auth::guard($guard)->guest()) {
            if ($request->ajax() || $request->wantsJson()) {
                return response(‘Unauthorized.‘, 401);
            } else {
                return redirect()->guest(‘login‘);
            }
        }
        return $next($request);
    }

意思就是说如果参数里存在iToken,则调用login登录,登录之后从参数里移除iToken,接下来改造login

1.修改trait Illuminate\Foundation\Auth\AuthenticatesUsers的validateLogin和参数获取方法方法,屏蔽用户名和密码的必要性检测

protected function validateLogin(Request $request)
    {
        if(!$request->has("iToken"))
        {
            $this->validate($request, [
                $this->loginUsername() => ‘required‘, ‘password‘ => ‘required‘,
            ]);
        }
    }
protected function getCredentials(Request $request)
    {
        if(!$request->has("iToken"))
        {
            return $request->only($this->loginUsername(), ‘password‘);
        }
        else
        {
            return $request->only("iToken");
        }
    }

2.修改最终查找用户的方法Illuminate\Auth\EloquentUserProvider类的retrieveByCredentials

public function retrieveByCredentials(array $credentials)
    {
        if (empty($credentials)) {
            return;
        }

        // First we will add each credential element to the query as a where clause.
        // Then we can execute the query and, if we found a user, return it in a
        // Eloquent User "model" that will be utilized by the Guard instances.
        $query = $this->createModel()->newQuery();

        if(!isset($credentials[‘iToken‘]))
        {
            foreach ($credentials as $key => $value) {
                if (! Str::contains($key, ‘password‘)) {
                    $query->where($key, $value);
                }
            }
        }
        else
        {
            $query->where("iToken", $credentials[‘iToken‘]);
        }
        return $query->first();
    }

现在就可以在url后面最近iToken参数来自动登录了,至于iToken的管理就是另外的事情了

时间: 2024-08-27 21:39:17

改造laravel的登录流程,仅使用一个token登录laravel的相关文章

CAS详细登录流程(转)

转:https://www.cnblogs.com/lihuidu/p/6495247.html 4.CAS的详细登录流程 上图是3个登录场景,分别为:第一次访问www.qiandu.com.第二次访问.以及登录状态下第一次访问mail.qiandu.com. 下面就详细说明上图中每个数字标号做了什么,以及相关的请求内容,响应内容. 4.1.第一次访问www.qiandu.com 标号1:用户访问http://www.qiandu.com,经过他的第一个过滤器(cas提供,在web.xml中配置

python测试开发django-60.使用token登录(TokenAuthentication)

前言 现在很多接口项目在登录的时候返回一个token,登录后的拿着这个token去访问访问登录之后的请求. 本篇使用djangorestframework框架写一个登陆的接口,登录成功后返回token. 环境准备: python 3.6 django 2.1.2 TokenAuthentication django rest framework权限和认证有四种方式: BasicAuthentication 此身份验证方案使用HTTP基本身份验证,根据用户的用户名和密码进行签名.基本身份验证通常仅

vue 注册登录完成后,发送token

vue项目,注册登录,登录完成后返回一个token 前提:注册,登录走通,vue.express.axios 登录成功后,给前端发送一个 user 对象,以及用jwt生成的token,作用:告诉服务端对应哪个数据 安装jwt: npm install jsonwebtoken // jwt.sign.签名,第一个参数:用户id:第二个参数:密钥,保密的文件,全局唯一,用来加密(SECRET) 1 const token = jwt.sign({ 2 id:String(user._id) 3 }

第三方微信接入登录流程整理

准备工作 1.在微信开放平台https://open.weixin.qq.com/注册成为开发者. 2.在“管理中心”中创建一个移动应用,需“应用名称.简介.及28*28和108*108的PNG图片各一张,且大小不超过300k”,点击下一步,需“应用官网地址,应用签名及包名”等信息,然后即可提交审核. 说明: 应用签名:可在微信开发平台的资源中心>>资源下载>>中下载“签名生成工具”,用户获取已经安装到手机的第三方应用的签名.输入应用包名,即可获得该应用的签名值. 3.提交审核后,

微信验证以及登录流程

前言: 现在大多数网站项目都支持微信登录,付款,以及支付宝登录付款,这种方式也是能够让用户很快速便捷的注册本网站的账号,进行登录,以及后续的操作.相信小伙伴们看完之后,会对怎么与微信或者支付宝服务器打交道有很深的理解,就当做是一个敲门砖吧.那么本篇主要针对微信的验证登录来打开通往微信服务器的大门,下一篇会主要讲解一下支付宝付款验证对接. 本篇为原创,转载请标出处:http://www.cnblogs.com/gudu1/p/8087130.html 下面我会使用大量的代码,代码中添加完整的注释来

登录流程-1

登录流程-1 (服务器是一个账号然后可以选择多个区,类似lol,其实就是把服务器列表发给客户端,账号就一个数据库,然后不同的服务器部署在不同的服务器上就是ip不同) e_msg_c_as_register_req e_msg_c_as_login_req 返回服务器列表,注意客户端得到的服务器列表的id数组,数据有相应id对于的ip地址,而不是真正的ip数组 e_msg_c_as_enter_area_req 进入某个选区,这个过程服务器有点复杂,首先AS产生token发给GS,GS保存toke

用户登录流程详解 +volley(StringRequest)

在实习期间由于要求使用volley,所以第一次开始接触volley,从一开始的迷茫陌生,到疯狂的查找各种资料,通过在项目中用到的实际问题,我想做一些总结,所以写了这篇文章.下面我将介绍我理解的用户登录的一套详细流程,涉及到volley请求以及json数据的解析. 登录流程的总结:首先通过EditText获取到用户名和密码,然后再执行登录请求 LoginToServer()里面发送用户名和密码,服务器返回给我json数据(如果用到Oauth 认证这里返回的json数据就应该是Token的一套东西,

大型手游登录流程

游戏登录过程在玩家的眼里是非常简单的,只需要点一下登陆按钮即可: 实际上这个过程没有想象的那么简单,特别是在手游中,一般会加入第三方渠道之后: 下面就把这个登录的整个过程写下来. 一 登录渠道(客户端) 流程: 1 客户端输入渠道账号user_name和密码password: 2 登录,登录SDK成功之后,会返回一个token: 3 保存token: 传入:app_id.app_key.user_name.password 返回:token 说明: app_id和app_key是游戏制作方在接入

Windows会话登录流程

Windows 结构图 Windows系统核心结构和组件 以上截图清晰的表现了Windows的主要结构,使我们对系统的构成有个大概的认识,下面介绍一下Windows会话登录大致流程: 1.内核模式的系统线程初始化Windows执行体和内核,最后阶段Smss(会话管理)进程. 2.Smss负责完成一系列操作,如打开额外页面文件,创建系统环境变量等,并将Csrss.exe(子系统进程)和Winlogon启动,Winlogon进程依次创建其他系统进程. 3.Smss的主线程负责监视Csrss和winl