Laravel 以及 UCenter 整合同步登录登出

废话不多说,直接上代码

1.安装UCenter

//在composer.json文件中添加以下代码
"goodspb/laravel5-ucenter": "dev-master"
//执行  
composer update
//安装完后,在 app/config/app.php 文件中找到 providers 键,添加:

Goodspb\Laravel5Ucenter\UcenterServiceProvider::class,

//找到 aliases 键,添加:

'Ucenter' => Goodspb\Laravel5Ucenter\Facades\Ucenter::class,

2.发布配置文件
执行如下代码

php artisan vendor:publish
选择Goodspb\Laravel5Ucenter\UcenterServiceProvider对应的数字即可

3.ucenter配置

<?php

/**
 * 为了方便,直接修改以下带【*】的配置即可
 */

return [
    'url'            => env('UC_URL', '/api/ucapi'),  //这里是你的项目所在的接口api的前缀,比如 /xx/api/uc 一般直接留空。
    'connect'        => env('UC_CONNECT', null), //这里可以是 mysql或者null,null会通过socket远程请求接口的方式通信
    'dbhost'         => env('UC_DBHOST', 'localhost'),
    'dbuser'         => env('UC_DBUSER', 'root'),
    'dbpw'           => env('UC_DBPW', 'root'),
    'dbname'         => env('UC_DBNAME', 'ucenter'),
    'dbcharset'      => env('UC_DBCHARSET', 'utf8'),
    'dbtablepre'     => env('UC_DBTABLEPRE', '`ucenter`.uc_'),
    'dbconnect'      => env('UC_DBCONNECT', '0'),
    //这个是通信密钥,必须和服务端统一【*】
    'key'            => env('UC_KEY', 'asflkhKFJHGH5648asdfasdfhj9845613asdf'),
    //这个是uc_server的服务端地址【*】
    'api'            => env('UC_API', 'http://你的ucenter服务端域名/uc_server'),
    //这个是uc_server的服务端地址【*】
    'ip'             => env('UC_IP', 'x.x.x.x'),
    'charset'        => env('UC_CHARSET', 'utf-8'),
    //这里是应用编号
    'appid'          => env('UC_APPID', '5'),
    'ppp'            => env('UC_PPP', '20'),
    //这里是uc_server调用你的程序的接口,配置成uc的话,将会和前面的UC_URL配置一起形成这样的地址 url/api/uc
    'apifilename'    => env('UC_APIFILENAME', 'uc'),
    //这里如果要异步登陆,可以直接继承这个类实现其中的方法,也可以创建app/Service/Ucenter.php(文件放哪里都可以,这里只是推荐) 实现该类实现的接口【*】
    'service'        => env('UC_SERVICE', 'Noxue\Ucenter\Services\Api'),
];

4.配置路由 这步很关键 直接放代码

Route::any(Config::get(‘ucenter.url’), function(){
return \Goodspb\Laravel5Ucenter\UcenterApi::execute();
});

5.bug修改

1.//在UcenterApi的68行左右有如下代码
return self::$get['action']($get, $post);        
//改成下面这两行代码
$actions = $get['action'];
 return self::$actions($get, $post);
2.//data/cache/apps.php文件  这个文件开始是空的 
<?php
$_CACHE['apps'] = array (
);
//改成下面这样的  写几个都行  但是必须不能为空
?>
<?php
$_CACHE['apps'] = array (
1,2,3,4,5
);

?>

6.进行测试的路由 直接上代码吧

Route::any('/index',function (){
    //这是同步退出的
    /*echo (Ucenter::uc_user_synlogout()) ;
    die;*/ 
  //这是登录的
    list($uid, $username, $password, $email) = Ucenter::uc_user_login('renzhifan','Rzfan0.cn');
    if($uid > 0) {
      //这是同步登录的
        $html=Ucenter::uc_user_synlogin($uid);
        echo ($html);
       die;
    } elseif($uid == -1) {
        echo '用户不存在,或者被删除';
    } elseif($uid == -2) {
        echo '密码错';
    } else {
        echo '未定义';
    }
})->middleware('web');
//注意这里一定要引入web中间件  因为涉及到写cookie  

参考文章 http://www.fengxiaochuang.com/?p=268

补充

第6步中路由配置那里
如果直接打断点
`
$html=Ucenter::uc_user_synlogin($uid);
dd($html);
`

返回如下代码 这里面的ucenter域名一定要和你的ucenter服务器域名对应的上 还有就是 uc.php 是在应用编辑里面设置的
(应用接口文件名称,不含路径) 这一项

< script type = "text/javascript"src = "http://ucenter服务端域名/api/uc.php?time=1537347068&code=e0d0irnkJpyyCnPLTtk4IMIfX11pakJVFWUzR0n%2BQxhDzQCxjpEOun3Y5gvu6U2i7wo2LLAyrHQurXU05ZLGo3mXD6qncCvq%2B0kBpoovyOoSKgwo%2Bo0YnMJBnrCvpm8mnvjxGMn6jRtwj26hvyrqcGDNww4px3pZmVs4nqFwU0Ff9Z0"reload = "1" > </script><script type="text/javascript " src="localhost / api / uc.php ? time = 1537347068 & code = c4f0xf0AWoFT74FURllbPLfLiH6yOsaV6WnXSNMGf9b4Km2uSjVDMOG % 2B1vd4bL6 % 2BmB4RG7tN5qLe70chxQCjHlJcfQwxIad7OXmnoZzps27L68 % 2FeBoZwq5GPxAe5siDfsBy % 2B1u87C4zL4OmkuGcbb8BLq6OLWkr9MBbwpwmRIyZVvEU " reload="1 "></script><script type="text / javascript " src="http: //应用域名/api/uc.php?time=1537347068&code=30b0%2FGQ3T9TkJv%2FDP7KGGSkg7zJfozCarM38xukNPZNfvIOn6TjgsPnVGMvJkNVOzrvCrqhd%2BOlYhGa0bXbzBQ%2BjEnoyXHMPcdlHH93iiy57MVMqR3nZb8kezfPEI%2FwVwer5xexoAYt%2BaXV67nKk%2F%2ByaH%2BVoCt6R2UogGAYo2b0vYvo" reload="1"></script><script type="text/javascript" src="http://应用域名/api/ucapi?time=1537347068&code=6471jtp65tlWtRxpxHAAvMbGt1kZzeQa6WTlqfkoGVl7xNy4CtYQJfW66ZYW6dp8Xms8V53cU6%2Bj3NA446W1t71r1o55fdOSJMzQo5iQn%2B76xHL34q%2FIzccbTHSQg8HwRTuDmuWNykTKq1mfFGxWjvWo%2BPWDju4YVZ1KfS7%2BMsBxfns" reload="1"></script>

再补充一下 如果laravel框架安装了laravel-debugbar插件 并且配置的url环境中APP_DEBUG=true 也会出现通信失败 此时只要关闭调试模式就可 设置APP_DEBUG=false 即可

任志帆博客
请先登录后发表评论
  • 最新评论
  • 总共0条评论
  • v1.0- renzhifan.cn 版权所有 ICP证:京ICP备18035965号
  • 联系邮箱:zhifan6797@163.com