(第三方登录)

创建应用,域名,详情请看:http://www.cnblogs.com/xujn/p/5287157.html

效果图:

把API,callback.php,qqlogin.php,图片,都放在web目录下.

第一种方法(mysql方法) call.back.php:

<?php
header('content-type:text/html;charset=utf-8');
require_once("./API/qqConnectAPI.php");
//放置按钮
$qc = new QC();
//根据code获取accesstoken
$token= $qc->qq_callback();
//根据accesstoken获取openid
$openid= $qc->get_openid();
//根据token和openid,获取用户信息
$qc = new QC($token,$openid);
$arr= $qc->get_user_info();
$nickname=$arr['nickname'];

//入库(1)
$link=mysqli_connect('localhost:3306','root','root');
mysqli_query($link,'use small2');
mysqli_query($link,'set names utf8');
$sql_openid="select * from qq where open_id='$openid'";
$db_openid=mysqli_query($link,$sql_openid);
//var_dump($db_openid);die;
$data_openid=mysqli_fetch_assoc($db_openid);
//判断用户id是否存在
if($data_openid)
{
    if($data_openid['token']==$token)
    {
         echo "<script>alert('登陆成功');location.href='http://www.small2.com/backend/web/index.php?r=login/login'</script>";
    }
    else
    {
       $token_update="update qq set token='$token' where open_id='$openid'";
       $db_token=mysqli_fetch_assoc(mysqli_query($link,$token_update));
       if($db_token)
       {
             echo "<script>alert('登陆成功');location.href='http://www.small2.com/backend/web/index.php?r=login/login'</script>";
       }
       else
       {
           echo "<script>alert('token修改失败');location.href='http://www.small2.com/backend/web/index.php?r=login/login'</script>";
       }   
    }
}
else
{
    //添加
    $add_login="insert into login(u_name,pwd) values('傻瓜','123456')";
    //echo $add_login;die;
    $data_add=mysqli_query($link,$add_login);
    if($data_add)
    {
        $select_userid="select * from login order by u_id desc";
        $last_id=mysqli_fetch_assoc(mysqli_query($link,$select_userid));
        $u_id=$last_id['u_id'];
        $add_useropen="insert into qq values(null,'$nickname','$u_id','$openid','腾讯QQ','$token')";
        $db_useropen=mysqli_query($link,$add_useropen);
        if($db_useropen)
        {
            echo "<script>alert('登陆成功');location.href='http://www.small2.com/backend/web/index.php?r=login/login'</script>";
        }
        else
        {
           echo "<script>alert('open添加失败');location.href='http://www.small2.com/backend/web/index.php?r=login/login'</script>";
        }
    }
    else
    {
           echo "<script>alert('用户添加失败');location.href='http://www.small2.com/backend/web/index.php?r=login/login'</script>";
    }
}
?>

第二种方法(跳转控制器):

callback.php:

$nickname=$arr['nickname'];
$all=$token.",".$openid.",".$nickname;
echo header("location:http://www.small2.com/backend/web/index.php?r=login/insert&all=$all");

控制器:

//保存第三方登录的用户信息,并验证是否成功
   public function actionInsert()
   {
      //接收token和openid
      $all=Yii::$app->request->get('all');
      //炸开字符串
      $res=explode(",",$all);
      //var_dump($res);die;
      $token=$res[0];
      $openid=$res[1];
      $nickname=$res[2];
      
      //查询openid
      $row=Yii::$app->db->createCommand("select * from qq where open_id='$openid'")->queryone();

//判断是否存在openid
      if($row['openid'])
      {
          //判断token
          if($row['token']==$token)
          {
              echo "<script>alert('登陆成功');location.href='http://www.small2.com/backend/web/index.php?r=login/login'</script>";
          }
          else
          {
            //修改token值
             $up_token=Yii::$app->db->createCommand()->update("qq",["token"=>$token]);
             if($up_token->execute())
             {
                echo "<script>alert('登陆成功');location.href='http://www.small2.com/backend/web/index.php?r=login/login'</script>";
             }
             else
             {
                echo "<script>alert('token修改失败');location.href='http://www.small2.com/backend/web/index.php?r=login/login'</script>";
             }
          }
      }
      else
      {
         //随意添加一条用户信息,测试一下
         $add_user=Yii::$app->db->createCommand()->insert("login",["u_name"=>'亲爱的',"pwd"=>'123456',"email"=>'495099758@qq.com','sex'=>'男','status'=>1])->execute();
         $u_id= intval(Yii::$app->db->getLastInsertId());
         //把用户id,openid,token插入表中
         $add_qq=Yii::$app->db->createCommand()->insert("qq",["nickname"=>$nickname,"open_id"=>$openid,"token"=>$token,"u_id"=>$u_id,"from"=>'腾讯QQ']);
         if($add_qq->execute())
         {
            echo "<script>alert('登陆成功');location.href='http://www.small2.com/backend/web/index.php?r=login/login'</script>";
         }
         else
         {
            echo "<script>alert('添加失败');location.href='http://www.small2.com/backend/web/index.php?r=login/login'</script>";
         }
      }
   }

yii框架中保存第三方登录信息的更多相关文章

  1. Yii框架中集成phprpc、hprose

    在项目开发的过程中有时候会涉及到对外提供接口供第三方程序调用或者是不同程序间需要相互通信,那么最通用的做法是用传统的SOAP方式来实现,用XML的文档格式来作为传输载体.但是这种方式不灵活,支持的数据 ...

  2. 使用Yii框架中遇到的三个问题

    以下由我们在信易网络公司开发项目的时候终结出的一些经验 使用Yii框架中遇到的三个问题 1.main.php文件中欲引入全局变量的问题 还原一下此问题:在Yii框架中,main.php一般会作为整个应 ...

  3. .NET跨平台之旅:ASP.NET Core从传统ASP.NET的Cookie中读取用户登录信息

    在解决了asp.net core中访问memcached缓存的问题后,我们开始大踏步地向.net core进军——将更多站点向asp.net core迁移,在迁移涉及获取用户登录信息的站点时,我们遇到 ...

  4. php使用session来保存用户登录信息

    php使用session来保存用户登录信息 使用session保存页面登录信息 1.数据库连接配置页面:connectvars.php <?php //数据库的位置 define('DB_HOS ...

  5. DedeCMS中实现在顶层banner中显示自定义登录信息

    一.需求描述 dedeCMS自带的模板中有互动中心模块,如下图所示: 由于会员登陆对我来说不是网站的重要模块且默认DedeCMS的会员中心模块的初始化很慢,常会显示“正在载入中,请稍候...”, 所以 ...

  6. 如何查看Firefox中保存的登录密码

    问:以前使用Firefox浏览器登录一个论坛,并且临时申请了一个账号,在使用Firefox登录时选择让它记住密码了,后来,我忘记了那个论坛的密码,但是可以使用Firefox直接登录.现在能不能查看密码 ...

  7. Yii 框架中安装 memcache 及配置和测试

    安装php_memcache.dll扩展 1.首先将php_memcache.dll文件放入E:\server\php\ext目录下 (php_memcache.dll下载地址:http://wind ...

  8. yii框架中关于控制器中filter过滤器和外部action的使用

    在yii框架中,控制器的过滤器分为执行前和执行后,这里举例是在执行控制器前的过滤. 需要在components/文件夹下定义公共的TestAction.php文件,并且实现run()方法.这个acti ...

  9. Yii框架中使用SRBAC作为权限管理模块时遇到的问题

    Yii框架中使用SRBAC作为权限管理模块时遇到的问题   看到Yii中提供RBAC的插件,SRBAC,就想用用. 结果按照手册上的安装办法,整来整去,安装完了,可就是进不了权限管理界面. 最后想到, ...

随机推荐

  1. 【Android测试】【随笔】模拟长按电源键

    ◆版权声明:本文出自胖喵~的博客,转载必须注明出处. 转载请注明出处:http://www.cnblogs.com/by-dream/p/5195121.html 起因 昨天群里看到有人问如何实现一个 ...

  2. frameset、frame、noframes和iframe的区别

    原网站地址:http://nmyun.blog.51cto.com/448726/155268 ■ 框架概念 :所谓框架便是网页画面分成几个框窗,同时取得多个 URL.只需要 <frameset ...

  3. 怎么用sql语句查询一个数据库有多少张表

    今天在技术群中闲谈时忽然聊到一个问题,那就是当一个数据库中有多张表时怎么快速的获取到表的个数,从而给问询者一个准确的回答. 大家或许会说,这个问题和我们的数据库操作没有太大关系或者不是很挂钩,所以没意 ...

  4. 玩儿了一下django User authentication

    五一在家,VPN不能链接了,而项目在本地run的过程中,又需要链接公司的SSO server才能login.下雨,不想去公司,又不得不在家做task,只能想办法避开SSO login,以前知道djan ...

  5. ArcGIS API for Silverlight 实现修改地图上的工程点位置

    原文:ArcGIS API for Silverlight 实现修改地图上的工程点位置 #region 处理工程点点击编辑相关事件 public Graphic editgraphics = null ...

  6. 7Z命令行

    7-Zip (A) 4.57 Copyright (c) 1999-2007 Igor Pavlov 2007-12-06 Usage: 7za <command> [<switch ...

  7. block 反向传值回调

    /** *  block 反向传值回调 */ //在第二个控制器中 //   (1)声明block,在基类中已写好 //   (2)写好传值方法 //(1) typedef void (^Return ...

  8. JMeter学习-014-JMeter 配置元件实例之 - 用户定义的变量 参数化配置

    前文讲述了通过 CSV Data Set Config 实现参数化配置(详情敬请参阅:JMeter学习-010-JMeter 配置元件实例之 - CSV Data Set Config 参数化配置), ...

  9. cssHack

    cssHack 不同的浏览器,比如Internet Explorer 6,Internet Explorer 7,Mozilla Firefox等,对CSS的解析认识不一样,因此会导致生成的页面效果不 ...

  10. cat 命令(转)

    cat命令的用途是连接文件或标准输入并打印.这个命令常用来显示文件内容,或者将几个文件连接起来显示,或者从标准输入读取内容并显示,它常与重定向符号配合使用. 1.命令格式: cat [选项] [文件] ...