welcome to xlongwei.com

欢迎大家一起学习、交流、分享


QQ:9167702333 邮箱:admin@xlongwei.com

添加QQ登录支持


分类 OurJS   关键字 分享   标签 ourjs   发布 hongwei  1425370214801
注意 转载须保留原文链接,译文链接,作者译者等信息。  
以前曾经做过QQ登录功能,可以方便作者登录发文,同时也是学习修改ourjs代码。
步骤:参考JSSDK文档,http://wiki.connect.qq.com/js_sdk%E4%BD%BF%E7%94%A8%E8%AF%B4%E6%98%8E
1,申请成为开发者,访问QQ互联,登录并申请即可
2,创建网站应用,需要验证域名,设置回调域名地址,每个应用会有APP ID和APP KEY信息
3,修改login.tmpl,这是ourjs的登录页面
引用脚本,填写正确的APPID和REDIRECTURI,例如http://www.xlongwei.com/login,回调地址可以是当前页面
<script type="text/javascript" src="http://qzonestyle.gtimg.cn/qzone/openapi/qc_loader.js" data-appid="APPID" data-redirecturi="REDIRECTURI" charset="utf-8" data-callback="true"></script>
添加登录按钮,得到nickname、openId、accessToken
    <span class="btn" id="qqLoginBtn">QQ登录</span>
<script type="text/javascript">
    QC.Login({btnId:"qqLoginBtn",size:"A_L",fullWindow:"true"}, function(oInfo, oOpts){
        var nickname = oInfo.nickname;
        QC.Login.getMe(function(openId, accessToken){
            location.href="/login.qq.redirect?openId="+openId+"&nickname="+nickname;
        });
    });
</script>
4,修改ourjs.js,支持/login.qq.redirect请求,这里按需注册用户并自动登录
webSvr.url('/login.qq.redirect', function(req, res) {
var query = url.parse(req.url, true).query;
if(query.nickname && query.openId){
var userInfo = Users.users[query.nickname];
if(!userInfo) {
console.log("qq login register: "+query.nickname+","+query.openId)
userInfo = {username: query.nickname, password: query.openId, email: query.openId+"@qq.com"}
Users.signup(userInfo);
}

req.session.set('username', userInfo.username)
var date = new Date(+new Date() + 365 * 24 * 3600 * 1000)
, opts = { path: '/', expires: date, domain: WEBSVR_CONFIG.sessionDomain, httponly: true }

res.cookie('autosign', userInfo.username, opts)
res.cookie('_id', userInfo._id, opts)
res.cookie('token', utility.getEncryption(userInfo.email), opts)
}
res.redirect('/')

}, 'qs')
5,访问/login时会自动记住已登录的QQ账户,如果需要切换QQ账户,可以先退出;登录链接改为/login?qq即可
if(location.href.indexOf("?qq")>-1) QC.Login.signOut();  //之前调用contains,存在bug