Zend Framework项目和Discuz单点登录

Discuz6.0以前的单点登录是用passport来实现的。单点登录实现起来也方便。但Discuz7.0加入了Ucenter。所以实现单点登录与以前的passport不同。用了好几种方法还是无法实现。总不能一直用6.0的吧。所以下定决心一定要搞定7.0的单点登录。用ucenter的加入应用程序怎样都会提示通信失败。所以不得不去看文档和网上的一些方案。用了好几种方式都无法实现。

最后在无耐中试了一下下面的方式。在没报希望的情况下,竟然可以。高兴之余还是告诉自己要看懂DISCUZ的源代码。不看源代码是不行的!放上代码。有博有要用的话可以参照下面的方式。

/*
 *单点登录
 */
 public function synloginAction() {
  $time=time();
  $username="test_1";
  $password="123456";
  $uid=3;
  if(array_key_exists("shop_memberid",$_COOKIE)){
   $mrow=$this->memberdetail($_COOKIE["shop_memberid"]);
   if($mrow!=null){
    $username=$mrow["loginid"];
    $password=$mrow["loginpwd"];
    list($uid, $username, $password, $email)=uc_user_login($username,$password);
   }
  }
  $authcode=uc_authcode('action=synlogin&username='.$username.'&uid='.$uid.'&password='.$password.'&time="'.$time, 'ENCODE','H3qcU3W0f32a77q2N4v1B6J8c294c3ncH8d5T3kdb6EdT6d5icE4Wefan1cfhdK7');
  $url='http://localhost:8000/discuz/api/uc.php?time='.$time.'&code='.urlencode($authcode);
  $synstr='<script type="text/javascript" src="'.$url.'" reload="1"></script>';
  echo $synstr;
  $this->JsGoto("http://localhost:8000/discuz/");
 }

博友有疑问的话可以留言!

原文地址:https://www.cnblogs.com/witer666/p/1587170.html