xml地图|网站地图|网站标签 [设为首页] [加入收藏]

YII2框架便捷快速的实现用户后台登录管理,完美

来源:http://www.ccidsi.com 作者:最新解决方案 人气:53 发布时间:2019-05-02
摘要:李秉骏:在Phonegap下实现oAuth认证 2012/07/18 · HTML5 · 2评论 · 来源:李秉骏     ·HTML5 本文由李秉骏(@CashLee李秉骏)投稿于伯乐在线,也应接任何朋友投稿。提醒:投稿时记得留下新浪

李秉骏:在Phonegap下实现oAuth认证

2012/07/18 · HTML5 · 2 评论 · 来源: 李秉骏     · HTML5

本文由李秉骏(@CashLee李秉骏)投稿于伯乐在线,也应接任何朋友投稿。提醒:投稿时记得留下新浪账号哦 皇家88登陆手机版 1

前些时间做过三遍关于Phonegap的当场沟通会议分享。基本上把Phonegap的1部分表征和大家沟通了瞬间,大家对于Phonegap的 兴趣也是至极多的。不过因为Phonegap绝对于原生应用来讲,只有一个View,这么些View便是3个Web的容器,这使得Phonegap就存在大多限制。当中一些的限制大家早就因此HTML伍的API以及Phonegap为我们搭建的桥去达成了,其余一些我们就得经过Phonegap plugins来贯彻,而实在本人个人感到Phonegap最精锐的地点也在于有那么大的2个群众体育在为她提供有滋有味的Plugins,以便去应对实在项 目中碰着的难题。

自身回想在和豪门交换的时候大家日常会问Phonegap如何做地方的缓存啊(WebSQL),怎么样近乎原生应用(那么些涉及到架构,界面渲染难题,这 里自个儿也倒霉深入讲,究竟不是本文要研究的始末),还有三个很胸口痛的主题材料就是如果要做一个开放平台的利用,如何落到实处oAuth认证。从前小编也超越过类似的一 些情况,当自个儿再度相遇那么些困难的题指标时候,笔者相信肯定也有Phonegap的观众蒙受类似的处境的。于是小编就总计下来何大家研讨一下怎么样消除这么些标题吧。

率先目的:消除oAuth认证。

制定安顿:一. 知道oAuth原理;贰.通晓Phonegap在拍卖那几个主题素材时候的运营机制;三. 制定安顿落到实处代码。

上面大家就来一步一步地解析,看怎么着化解这一个状态吗。(因为自己在品种中境遇的是腾讯和讯开放平台的oAuth认证,那么上边笔者就用腾讯oAuth认证为例吧)

关于oAuth认证,相信做过开放平台应用的情人都早就1贰分熟识了,如若你还尚未做过依旧对于oAuth认证流程非常不打听,那么本身提出你先明白一 下原理,在这里小编不期望花太多的字数去介绍那么些东西,因为在广大地方都得以找到,上面作者推荐三个地方方便大家去读书,一定要读书,这会对您精晓上边包车型客车篇章 有中度的帮扶的。

腾讯新浪开放平台:

今日头条和讯开放平台:

本来在这里上面须求解说表明的是oAuth认证机制是二个通用的一手,不过因为各类开放平台有自己的计策,因而大概在里边稍有改观,而且最终收获的权力也会各不相同。而目前腾讯网和讯实在太多坑爹的思想政治工作了,实在忍受不住,于是本人转战到腾讯的平台了。

好的,倘令你看完了oAuth认证的流程,就直接到此处来。远近盛名,在oAuth认证的流水生产线中,有一个授权页面,而以此授权页面是经过开放平台提供的,具体的体裁见下图:

皇家88登陆手机版 2

以此页面用于输入开放平台的帐户以及密码,通过授权获取响应的openid以及openkey,最终换取access-token(待会作者会结合腾讯和讯oAuth认证流程的性格,以及代码和豪门解析的)。

其一页面是弹出的,假诺在Phonegap里面做的话会很想获得:1,因为属于弹窗,在Phonegap中自个儿正是2个WebView借让你还弹的话 就能够飞到了Safari的浏览器中,那就跳出应用自己,跳出来认证还有戏呢?贰,通过iFrame,首先体验13分倒霉,其次iFrame本人又属于跨域的 难题,那就倒霉消除了(为啥体验不佳呢,主就算因为授权页面的体裁是不固定的,类似腾讯和讯开放平台,就比微博的授权页面做得差,根本不和手提式有线电话机包容的, 而且有些做得好的,认证页宽度正是320px,就占了你整整应用的版面,体验很糟糕)那么Phonegap中该怎么兑现吗?

带着主题材料,大家就巴望在Phonegap中另行引进1个WebView。刚刚提到Phonegap的强劲还在于繁多个人以及合法的团组织,为其提供了壹套很好的插件机制,以搞定五花八门的内需。在Phonegap中有贰个插件叫做ChildBrowser,顾名思义正是:子浏览器。(其实自个儿在上一回的 Phonegap专题技巧分享中以及谈起到让大家用这些事物去消除,不过当下享受时间少于只能草率带过,抱歉)子浏览器的功能其实就是令你在 Phonegap应用内部调起贰个浏览器的View,让您举办pdf,图片,录制,以致网页阅读的工具。(实际上你看自己上边包车型地铁截图,就是用 ChildBrowser来达成的)这就好了,这就能够让你调起浏览器而且不跳出应用本人了,能够很好地消除oAuth认证的标题。 ChildBrowser下载地址:

在地方上边,你应该早就观望ChildBrowser的安装情势以及使用办法了,分外轻易,真正的即插即用。假使您感觉英文太难,这作者就帮不了你 了,你就活动谷歌(Google)翻译一下啊。相信您神速就足以做出3个ChildBrowser的德姆o的。在那一个地点上面,其实您回来上1层目录,其实您也 已经见到丰富多彩的Phonegap Plugins,通过这几个东西,你还足以调用起手提式有线电话机内部更加多风趣的财富的!那一个将要靠你本身去开采啦!(其余平台的行使也有对应的插件的Android开采者不要骂果粉哦!)

好了逐月地大家将在涉及到代码部分了。首先大家看看调用ChildBrowser的Javascript代码:

JavaScript

cb = window.plugins.childBrowser; /* if(cb != null) { cb.onLocationChange = function(loc){ root.locChanged(loc); };//地址产生转移时候实行的函数 cb.onClose = function(){root.onCloseBrowser(); };//通过js关闭ChildBrowser的法子 cb.onOpenExternal = function(){root.onOpenExternal(); }; */ cb.showWebPage("");

1
2
3
4
5
6
7
8
        cb = window.plugins.childBrowser;
/*
        if(cb != null) {
        cb.onLocationChange = function(loc){ root.locChanged(loc); };//地址发生改变时候执行的函数
        cb.onClose = function(){root.onCloseBrowser(); };//通过js关闭ChildBrowser的办法
        cb.onOpenExternal = function(){root.onOpenExternal(); };
*/
        cb.showWebPage("http://google.com");

中间cb正是起初化的ChildBrowser,而showWebPage正是调起那一个页面包车型客车方式。可见代码中要张开的网站便是谷歌(Google).com啦,那几个地球人都可以看得懂了。于是大家就可以立即想到大家要用ChildBrowser张开的网址是我们在英特网钦赐的利用授权站点 了。而本人是安插在SAE上边的,所以上边包车型客车例子也用PHP来说呢,期待语言也是一模同样的道理,转义就足以了。在说代码此前,我们先来讲说现实通信的流水生产线,以 及大家接下去要高达的靶子。

皇家88登陆手机版 3
在此地,大家的手提式有线电话机端是通过走访SAE服务器,由SAE服务器管理数据并与腾讯博客园开放平台通信的,这里手提式有线电话机端并不曾直接和腾讯乐乎开放平台通信(作者如此 管理的来头是一,方便在劳动器端管理帐户,那样的话可以观测本身的运用的帐户情形;贰,服务器端达成推送机制,方便管理token以及做api;三,服务 器端还足以和别的开放平台帐户绑定)。由此,大家的漫天认证方案会在劳务器端落成。

而基于腾讯新浪开放平台,大家第二会在开放平台上边注册自身的选用,注册的流程以及艺术自个儿不说了,注册的地方是:,注册你的采取后,你对号入座能够收获的事物是:

JavaScript

动用名称:mobile_test_api 应用类型:客户端应用 App Key:8888888八 App Secret:ainidenideiienfeomeomroemrome

1
2
3
4
应用名称:mobile_test_api
应用类型:客户端应用
App Key:88888888
App Secret:ainidenideiienfeomeomroemrome

在此地笔者的App key以及App Secret是假的(你懂的,你应有有你自身的),上边我们就选拔Tencent提要求大家的PHP SDK,下载地址:。有了SDK后大家就足以把SDK放到自个儿的情状方面,然后配置服务器端的代码了。下图是作者大致布置的服务端的代码,lib下存放的就是腾讯天涯论坛的sdk。当然实际生产条件和那个有例外。这里仅仅作为示范使用:

皇家88登陆手机版 4

上面就根据腾讯果壳网证实的流水生产线,逐一批注一下那一个文件以及中间的代码吧。

index.php

PHP

<?php require_once 'app_config.php'; $url=" header('Location:'.$url);

1
2
3
4
5
6
<?php
require_once 'app_config.php';
 
$url="https://open.t.qq.com/cgi-bin/oauth2/authorize?client_id=".$client_id."&APP_KEY=".$app_key."&wap=2&response_type=code&redirect_uri=http://yoururl.com/get_auth.php";//指定URL地址
 
header('Location:'.$url);

此间引进的app_config.php

PHP

<?php $client_id = '8888888888'; $app_key = 'anienineiienrieireowq2839289';

1
2
3
4
5
<?php
 
$client_id = '8888888888';
 
$app_key = 'anienineiienrieireowq2839289';

因为依照腾讯博客园开放平台,大家率先步要拿走的是Code,如下所述,大家要做的正是搞活陈设,获取这些Code

JavaScript

第二步:请求code 请求方法: GET 请求地址: 重临结果: 借使授权成功,授权服务器会将用户的浏览注重定向到redirect_uri,并带上code,openid和openkey等参数,重定向的url如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
第一步:请求code
 
请求方法:
GET
 
请求地址:
 
https://open.t.qq.com/cgi-bin/oauth2/authorize?client_id=APP_KEY&amp;response_type=code&amp;redirect_uri=http://www.myurl.com/example
 
返回结果:
如果授权成功,授权服务器会将用户的浏览器重定向到redirect_uri,并带上code,openid和openkey等参数,重定向的url如下:
 
http://www.myurl.com/example?code=CODE&amp;openid=OPENID&amp;openkey=OPENKEY

现实需求请求附带的参数,必须求根据oAuth2.0鉴权的页面提醒的展开。()

然后我们再来看看我们所安插的文书:

get_auth.php

PHP

<?php require_once 'app_config.php'; $code = $_REQUEST['code']; $openid = $_REQUEST['openid']; $openkey = $_REQUEST['openkey']; $url = ""; $message = file_get_contents($url); /* success to print the access token message */ $access = explode("=",$message); print_r("<br />"); $access_message = explode("&",$access[1]); $access_token = $access_message[0]; $user_name = $access[4]; print_r($access_token ." " . $user_name);

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?php
 
require_once 'app_config.php';
 
$code = $_REQUEST['code'];
 
$openid = $_REQUEST['openid'];
 
$openkey = $_REQUEST['openkey'];
 
$url = "https://open.t.qq.com/cgi-bin/oauth2/access_token?client_id=".$client_id."&client_secret=".$app_key."&grant_type=authorization_code&code=".$code."&redirect_uri=http://yoururl.com/get_auth.php";
 
$message = file_get_contents($url);
 
/* success to print the access token message */
 
$access = explode("=",$message);
 
print_r("<br />");
 
$access_message = explode("&",$access[1]);
 
$access_token = $access_message[0];
 
$user_name = $access[4];
 
print_r($access_token ."   " . $user_name);

实际上到以上结束,我们的布局文件已经弄好了。在那么些布局文件中,实际上大家要做的就是腾讯新浪开放平台南聊起的第叁步:

JavaScript

第贰步:请求accesstoken 请求地址: 重返结果: 重返字符串: access_token=ACCESS_TOKEN&expires_in=60&refresh_token=REFRESH_TOKEN

1
2
3
4
5
6
7
8
9
第二步:请求accesstoken
 
请求地址:
 
https://open.t.qq.com/cgi-bin/oauth2/access_token?client_id=APP_KEY&amp;client_secret=APP_SECRET&amp;redirect_uri=http://www.myurl.com/example&amp;grant_type=authorization_code&amp;code=CODE
 
返回结果:
返回字符串:
access_token=ACCESS_TOKEN&amp;expires_in=60&amp;refresh_token=REFRESH_TOKEN

假设你以后已经铺排好您的劳务端口,已经计划好手机端的ChildBrowser,你就已经能够在手机方面看看整个认证的流程了。今后的行事已经落成了绝大许多了,然而仔细的恋人恐怕会发觉,对呀,认证是产生了,手提式有线电话机上大概不曾到手授权啊,因为授权后的消息还不能通过手机去获得。不要 急,ChildBrowser有意思的地点还并未有完呢。在四哥大端方面大家做到了oAuth认证,总有局地参数重回,不管accesstoken是否留存手机端,你必须有个帐户机制和服务端通信。小编的服务端在SAE上边,小编就确立三个唯1id给手提式有线电电话机,于是作者就确立了1个帐户机制,存在服务端上,服务端上囤积的事物是:

MySQL

CREATE TABLE IF NOT EXISTS `auth_user` ( `id` int(10) NOT NULL AUTO_INCREMENT, `muser` varchar(255) COLLATE utf8_unicode_ci NOT NULL, `access_token` varchar(255) COLLATE utf8_皇家88登陆手机版,unicode_ci NOT NULL, `openid` varchar(255) COLLATE utf8_unicode_ci NOT NULL, `openkey` varchar(255) COLLATE utf8_unicode_ci NOT NULL, `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL, `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;

1
2
3
4
5
6
7
8
9
10
CREATE TABLE IF NOT EXISTS `auth_user` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `muser` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `access_token` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `openid` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `openkey` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;

骨子里那几个表也还一贯不全面,作者必须还要纪录这几个用户是或不是在线(如若有推送机制)。此后手提式有线电话机端和服务端通讯就经过上边的id以及token等的音讯进行通信,再经过服务端想腾讯乐乎展开api的报道,获取大家想要的新闻。那么注解后大家经过什么路径得到表达后归来的新闻吗?大家看看上面JS调节ChildBrowser的代码。会发觉里头有一个艺术:

JavaScript

cb.onLocationChange = function (loc){ console.warn(loc); };

1
cb.onLocationChange = function (loc){ console.warn(loc); };

万壹您在xCode下边跑那段代码的话,你会发觉loc打出来的是每一遍ChildBrowser里面浏览的网页改换的地址。这一年大家就足以因时制宜,依据这里提供的法子,用url的办法把地方再次来到到Phonegap肩负逻辑管理的JS代码中,同时将相关要求通信的新闻也回到。再次回到后还足以经过回 调的秘技实践关闭ChildBrowser的代码:

JavaScript

cb.close();

1
cb.close();

自然,你还足以实践更加多异步请求的代码。至于说还足以由此什么样的点子进行广播发表其实还有不少艺术,小编这里唯有是提供一下思路教导以及艺术。具体的 话,还要推行出真理论,做到万分安全的报道还值得大家继续深刻斟酌。那么自个儿要介绍的光景就到那边停止。因为其实项目中大家还有push notification的编写制定,所以往来作者应当还会联同@Jeff_Kit 落成一下Phonegap的推送方案,并整理出sdk,成文后开放出来方便我们沟通。

对于本文即便有如何问题还是建议都能够一贯向本身反映,小编的天涯论坛博客园是:@CashLee李秉骏 ,小编还时不时分享部分代码片段在github上边(开源的生气不多,所以开源项目较少,希望将来增添吗。)笔者的Github账号, 应接您和自身随时进行调换,也目的在于Phonegap的神州开垦者社区会变得进一步优良。

注意:ChildBrowser控件在实际条件中因为安全主题素材只怕供给修改,通信进程中参数也提议加密。:-)

 

正文由李秉骏(@CashLee李秉骏)投稿于伯乐在线,也应接任何朋友投稿。提示:投稿时记念留下腾讯网账号哦 皇家88登陆手机版 5

【如需转发,请标注并保留原作链接和小编等音讯,感激合营!】

 

 

1 赞 收藏 2 评论

皇家88登陆手机版 6

互连网有广大有关YII二.0微信支付教程,但是太过复杂凌乱,所以明日在那边给大家整理总计运用Yii二微信后台开荒的数不尽了,给需求的伙伴们参考。

上一篇小说我们介绍马上搭建YII二框架advanced安装配置

一:接入微信

本篇作品将会合营YII二框架原有的报到机制模板急速的落到实处用户后台的记名

Yii2后台配置

一:在数据库创建相应的用户新闻表

SET FOREIGN_KEY_CHECKS=0;

DROP TABLE IF EXISTS `admin`;

CREATE TABLE `admin` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`username` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL COMMENT '账户',

`auth_key` varchar(32) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,

`password_hash` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,

`password_reset_token` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,

`email` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,

`role` smallint(6) NOT NULL DEFAULT '10',

`mobile` varchar(11) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL COMMENT '手提式有线电话机号码(登6账号)',

`status` smallint(6) NOT NULL DEFAULT '10' COMMENT '状态',

`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,

`updated_at` datetime NOT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC;

INSERT INTO `admin` VALUES ('1', 'yicheng', 'kjfaoigk', '$2y$13$k0312JALBVCy7f2iPfJGXOdYUEYl6x8nSynSLpDNx6ky19gqZmCF2', '', '837269003@qq.com', '10', '15980893193', '10', '2017-09-28 16:08:31', '2017-09-19 16:08:28');

将上述 SQL文件举办实行,首先新建数据库

皇家88登陆手机版 7

皇家88登陆手机版 8

将数据库参数改为友好数据库名称

皇家88登陆手机版 9

输入账户:yicheng  密码:12345陆 ,会报错 提醒User表格不存在

皇家88登陆手机版 10

即便我们把原来数据建构的admin 表格重命名 为user  刷新页面此时就从不报错了,呈现登入成功

皇家88登陆手机版 11

1.在app/config/params.php中配置token参数

二:一般景况下User是留住前端普通用户注册使用的,怎么样用自个儿的后台管理员Admin表格呢

将上一步的表格名称再一次修改回admin,

在浏览器中走访:yii二.login/index.php?r=gii ,策画生成model

皇家88登陆手机版 12

填好有关新闻,框架会自动生成到文件目录

皇家88登陆手机版 13

修改配置文件 设置用户登陆验证类为上一步生成的admin模型

皇家88登陆手机版 14

那会儿再也输入以yii二.login 意识依然会报错,那又是怎么吗

皇家88登陆手机版 15

是因为大家平素不得以完结IdentityInterface接口

皇家88登陆手机版 16

将原来的User 和model做二个比对,将Admin里面未有的函数从User表里面拷贝过来。

皇家88登陆手机版 17

指定新的LoginForm: 拷贝壹份LoginForm 修改它的命名空间,然后将Login 使用的Admin  as为User

皇家88登陆手机版 18

SiteController 即咱们暗中认可的登6器 钦赐大家配备好的LoginForm

皇家88登陆手机版 19

return [
 //微信接入
 'wechat' =>[
 'token' => 'your token',
 ],
];

贰.在app/config/main.php中安顿路由

因为接口模块使用的RESTful API,所以必要定义路由规则。

'urlManager' => [
 'enablePrettyUrl' => true,
 'enableStrictParsing' => true,
 'showScriptName' => false,
 'rules' => [
 [
  'class' => 'yiirestUrlRule',
  'controller' => 'wechat',
  'extraPatterns' => [
  'GET valid' => 'valid',
  ],
 ],
 ],
],

3.在app/controllers中新建WechatController

<?php

namespace apicontrollers;

use Yii;
use yiirestActiveController;

class WechatController extends ActiveController
{

 public $modelClass = '';

 public function actionValid()
 {
 $echoStr = $_GET["echostr"];
 $signature = $_GET["signature"];
 $timestamp = $_GET["timestamp"];
 $nonce = $_GET["nonce"];
 //valid signature , option
 if($this->checkSignature($signature,$timestamp,$nonce)){
  echo $echoStr;
 }
 }

 private function checkSignature($signature,$timestamp,$nonce)
 {
 // you must define TOKEN by yourself
 $token = Yii::$app->params['wechat']['token'];
 if (!$token) {
  echo 'TOKEN is not defined!';
 } else {
  $tmpArr = array($token, $timestamp, $nonce);
  // use SORT_STRING rule
  sort($tmpArr, SORT_STRING);
  $tmpStr = implode( $tmpArr );
  $tmpStr = sha1( $tmpStr );

  if( $tmpStr == $signature ){
  return true;
  }else{
  return false;
  }
 }
 }

}

微信公众号后台配置

在微信公众号后台配置U大切诺基L和Token,然后交给认证就可以。

URL:http://app.demo.com/wechats/valid
Token:your token

2:获取用户新闻

用户表设计

复制代码 代码如下:

CREATE TABLE `wechat_user` (
  `id` int(11) NOT NULL,
  `openid` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `nickname` varchar(50) COLLATE utf8_unicode_ci NOT NULL COMMENT '微信别称',
  `sex` tinyint(4) NOT NULL COMMENT '性别',
  `headimgurl` varchar(255) COLLATE utf8_unicode_ci NOT NULL COMMENT '头像',
  `country` varchar(50) COLLATE utf8_unicode_ci NOT NULL COMMENT '国家',
  `province` varchar(50) COLLATE utf8_unicode_ci NOT NULL COMMENT '省份',
  `city` varchar(50) COLLATE utf8_unicode_ci NOT NULL COMMENT '城市',
  `access_token` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `refresh_token` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
ALTER TABLE `wechat_user`
  ADD PRIMARY KEY (`id`);

本文由68399皇家赌场发布于最新解决方案,转载请注明出处:YII2框架便捷快速的实现用户后台登录管理,完美

关键词: 68399皇家赌场 HTML5 日记本 php开发YI...

上一篇:时间流互联网之未来

下一篇:没有了

最火资讯