新金沙3777

新金沙3777这意味着需要自己来实现原来的一系列的函数,本文实例讲述了thinkPHP5项目中实现QQ第三方登录功能

四月 2nd, 2020  |  未分类

以上所述是小编给大家介绍的基于thinkphp6.0的success、error实现方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

public function index(){ //加载页面 return view();}

在回调函数里面要实例化两次QC才能拿到用户信息,第二次实例化的时候才有openid和access_token两个参数。

系统不再提供基础控制器类thinkController ,原来的success 、error
、redirect 和result 方法需要自己在基础控制器类里面实现。

   :) https://www.jb51.net/article/    :( https://www.jb51.net/article/ 

然后构造函数,实例化三个类,有两个已经不存在了,而且上面说了,跟这两个单词有仇,看到就要注释或删掉。

我这里参考to5.1的跳转源码,进行改进得到,具体步骤如下:

success.tpl

// protected $recorder;public $urlUtils;// protected $error;public $state;public $appid = "****";public $callback = "http://****/index/user/qqcallback";public $scope = "get_user_info";
// 默认跳转页面对应的模板文件 'dispatch_success_tmpl' => app . '/app/tpl/dispatch_jump.tpl', 'dispatch_error_tmpl' => app . '/app/tpl/dispatch_jump.tpl',

1.index.html布局

最后一句是header跳转,暂不知道什么原因在tp5里面并不能看到跳转效果,于是直接将url返回,再在控制器里面通过tp5的重定向函数$this->redirect()实现跳转。

2、在config文件夹的app.php中添加配置模板文件的路径

3.修改跳转页面的模版

// 注册的根命名空间'root_namespace' => [ 'extendqqlogin' => '../extend/qqlogin/', 'extendbaidu' => '../extend/bdlogin/'],

最近把项目升级到tp6.0,一开始比较顺利,安装文档升级,但是升级指导指出:

错误!             页面自动 跳转 等待时间: https://www.jb51.net/article/       { var wait = document.getElementById, href = document.getElementById.href; var interval = setInterval{ var time = --wait.innerHTML; if { location.href = href; clearInterval; }; }, 1000); })(); 

下面看qq_callback()

总结

c、跳转方法给模版页面的数据

新金沙3777,改造完成,可以在控制器里面使用了,附上代码入下:

十大正规网赌网址,新金沙3777这意味着需要自己来实现原来的一系列的函数,本文实例讲述了thinkPHP5项目中实现QQ第三方登录功能。1、app目录下新建一个tpl文件夹,放入dispatch_jump.tpl文件,这个可以直接到原来的tp5中copy

希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

切记:

这意味着需要自己来实现原来的一系列的函数

本文实例讲述了ThinkPHP5.1框架页面跳转及修改跳转页面模版。分享给大家供大家参考,具体如下:

2. 放到tp框架里

3、在基类BaseController中添加下面的代码:

C:wampwwwtp5thinkphptpldispatch_jump.tpl

use extendqqloginQC;// 处理qq登录public function qqlogin; $url = $qq->qq_login(); $this->redirect;}// qq登录回调函数public function qqcallback{ $qq = new QC; $qq->get_openid; $datas = $qq->get_user_info(); * // 拿到用户信息后的处理 *}
use thinkexceptionHttpResponseException;use thinkResponse;…… /** * 操作成功跳转的快捷方法 * @access protected * @param mixed $msg 提示信息 * @param string $url 跳转的URL地址 * @param mixed $data 返回的数据 * @param integer $wait 跳转等待时间 * @param array $header 发送的Header信息 * @return void */ protected function success($msg = '', string $url = null, $data = '', int $wait = 3, array $header = []) { if  && isset($_SERVER["HTTP_REFERER"])) { $url = $_SERVER["HTTP_REFERER"]; } elseif  { $url =  || 0 === strpos ? $url : $this->app->route->buildUrl; } $result = [ 'code' => 1, 'msg' => $msg, 'data' => $data, 'url' => $url, 'wait' => $wait, ]; $type = $this->getResponseType(); // 把跳转模板的渲染下沉,这样在 response_send 行为里通过getData()获得的数据是一致性的格式 if ('html' == strtolower { $type = 'view'; } $response = Response::create->header->options(['jump_template' => app()->config->get('app.dispatch_success_tmpl')]); throw new HttpResponseException; } /** * 操作错误跳转的快捷方法 * @access protected * @param mixed $msg 提示信息 * @param string $url 跳转的URL地址 * @param mixed $data 返回的数据 * @param integer $wait 跳转等待时间 * @param array $header 发送的Header信息 * @return void */ protected function error($msg = '', string $url = null, $data = '', int $wait = 3, array $header = []) { if  { $url = $this->request->isAjax() ? '' : 'javascript:history.back;'; } elseif  { $url =  || 0 === strpos ? $url : $this->app->route->buildUrl; } $result = [ 'code' => 0, 'msg' => $msg, 'data' => $data, 'url' => $url, 'wait' => $wait, ]; $type = $this->getResponseType(); if ('html' == strtolower { $type = 'view'; } $response = Response::create->header->options(['jump_template' => app()->config->get('app.dispatch_success_tmpl')]); throw new HttpResponseException; }
//跳转后处理的方法public function bbc(){ //接受数据  $username = $_POST['username']; $password = $_POST['password']; //判断输入的信息 if ($username == 'admin' && $password == 'admin'){ //跳转地址未设置时,默认返回上一个页面 $this->success('登录成功!','Index/diaoyong'); }else{ $this->error; }}

下面的get_openid()方法类似,参数列表用session构建,返回值直接写进session。

admin/index

因为QC.php是继承了Oauth.php,我们从后者改起,去掉require_once,加上命名空间这个就不说了,首先看成员属性,类常量是腾讯平台的地址,不用管,原来有三个属性,recorder、error不需要,注释掉或直接删掉。下文同样,要想象跟这两个单词有仇,看到就注释或删掉。

2.index()方法:

下面四个属性是需要添加的,state用于防止CSRF攻击,下面三个看官方文档就知道是什么东西了,这些原来是在comm文件夹下的inc.php存放的,现在直接拿过来变成成员属性。

view->lpp->index.html

$this->keysArr = array( "oauth_consumer_key" => $this->appid, "access_token" => session, "openid" => session;

图片位置: 和

另外为了防止tp5找不到我们需要的文件,最好在config.php文件里注册一条根命名空间,在第30行:

例如:error.tpl

public function qq_login(){ $appid = $this->recorder->readInc; $callback = $this->recorder->readInc; $scope = $this->recorder->readInc; //---生成唯一随机串防CSRF攻击 $state = md5; $this->recorder->write; * * return $login_url; // header("Location:$login_url");}

index.html输入内容后跳转处理数据的方法

我们已经有仇把有那两个单词的这几行删掉了,我们又需要这些东西,不要忘了我们上面增加了三个成员属性,这些值我们已经有了下面用的时候通过$this->appid就好了。state验证的时候我们可以通过session去验证,在tp5里面提供了助手函数去写session:

echo $code.""; --返回的状态码 1成功 0失败echo $msg.""; --页面的提示信息echo $wait.""; --等待的时间echo $url.""; --制定跳转页面 默认返回上一个页面echo $data.""; --用户返回的数据

然后再修改QC.php,只需修改构造方法,把数组的三个变量给一下值就好了。

对应的控制器 创建对应的HTML

可以看到里面只有三个类,我去掉了一个Recorder和一个ErrorCase类,见名知意,这两个的作用是记录一些信息,如access_token,还有异常处理,这里我就直接删掉了。另外注意,按照psr4规范,类名要跟文件名一致,所以要把文件名改一下,同时加上命名空间extendqqlogin,tp5所有的类都要有命名空间。

更多关于thinkPHP相关内容感兴趣的读者可查看本站专题:《ThinkPHP入门教程》、《thinkPHP模板操作技巧总结》、《ThinkPHP常用方法总结》、《codeigniter入门教程》、《CI框架进阶教程》、《Zend
FrameWork框架入门教程》及《PHP模板技术总结》。

框架外使用的时候是include 'qqConnectAPI.php',打开这个文件可以看到它是包含了另外几个文件的,comm文件夹下的几个文件无非就是定义一些常量,记录一下你的APP
KEY这些信息,都无关紧要,只要把class文件夹下的几个类文件放到tp5里面就好了,而且仔细看一下代码会发现其实只要拿到三个类就完全可以实现功能了。

C:wampwwwtp5thinkphptpldispatch_jump.tpl

出现那两个单词的已经注释了,我们在qq_login里面有写session,这里直接取sessio比较就行了,input()也是tp5的助手函数,可以获得get、post请求的参数,结果是一个数组,但是不能够再动态为其添加键值对,想要添加的话必须将其赋给一个变量,再对变量进行操作。这里有错误的话直接exit打印出错误号,官方文档有详细的错误号说明。在最后也是直接将获取到的access_token写进session。

a、在app.php文件里面找到设置模版位置

public function qq_callback(){ // $state = $this->recorder->read; //---验证state防止CSRF攻击 if != session{ // $this->error; exit; } * * // return $params["access_token"]; session('access_token',$params["access_token"]);}
session;

更多关于thinkPHP相关内容感兴趣的读者可查看本站专题:《ThinkPHP入门教程》、《thinkPHP模板操作技巧总结》、《ThinkPHP常用方法总结》、《codeigniter入门教程》、《CI框架进阶教程》、《Zend
FrameWork框架入门教程》及《PHP模板技术总结》。

tp5推荐将第三方的东西,同时又不是composer安装的统一放到extend目录下,因为可能以后还要做其他扩展,这里将qq登录相关的单独建一个qqlogin文件夹,

4. 控制器调用

再看下面的第一个成员方法qq_login()

最近用thinkPHP
5框架做了一个婚纱店的项目,在开发过程中需要用到第三方登录,腾讯官方给的案例是几个文件相互包含实现的,放到tp5里面很悲催的发现在控制器中不能通过include或者require完成预期功能,想要用腾讯官方封的类就必须对其进行修改,修改如下:

本文实例讲述了thinkPHP5项目中实现QQ第三方登录功能。分享给大家供大家参考,具体如下:

希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

1. 找到官方SDK里面的核心文件

3. 改造源代码

相关文章

Your Comments

近期评论

    分类目录

    • 没有分类目录

    功能


    网站地图xml地图