2
2
namespace App \Controller ;
3
3
use App ;
4
4
use Swoole ;
5
+ use ZenAPI \QqClient ;
6
+ use ZenAPI \QqOAuth2 ;
5
7
6
- require_once APPSPATH .'/classes/WeiboOAuth.php ' ;
7
- require_once APPSPATH .'/classes/qqoauth.func.php ' ;
8
+ require_once APPSPATH .'/include/libweibo/saetv2.ex.class.php ' ;
8
9
9
10
class Page extends App \FrontPage
10
11
{
@@ -23,62 +24,119 @@ function verify()
23
24
return $ verifyCode ['image ' ];
24
25
}
25
26
26
- function oauth ()
27
- {
27
+ function callback_weibo ()
28
+ {
28
29
session ();
29
- if (empty ($ _GET ['s ' ]) or $ _GET [ ' s ' ] == ' sina ' )
30
+ if (empty ($ _GET ['code ' ]))
30
31
{
31
- $ conf = $ this ->config ['oauth ' ]['weibo ' ];
32
- $ oauth = new \WeiboOAuth ($ conf ['appid ' ], $ conf ['skey ' ]);
33
- $ keys = $ oauth ->getRequestToken ();
34
- $ _SESSION ['oauth_keys ' ] = $ keys ;
35
- $ _SESSION ['oauth_serv ' ] = 'sina ' ;
36
- $ login_url = $ oauth ->getAuthorizeURL ($ keys ['oauth_token ' ], false , $ conf ['callback ' ]);
37
- $ this ->swoole ->http ->redirect ($ login_url );
32
+ $ this ->http ->redirect ('/page/login/ ' );
33
+ return ;
38
34
}
39
- else
35
+
36
+ $ conf = $ this ->config ['oauth ' ]['weibo ' ];
37
+ $ oauth = new \SaeTOAuthV2 ($ conf ['appid ' ], $ conf ['skey ' ]);
38
+ $ keys ['code ' ] = $ _GET ['code ' ];
39
+ $ keys ['redirect_uri ' ] = $ conf ['callback ' ];
40
+
41
+ $ token = $ oauth ->getAccessToken ('code ' , $ keys );
42
+ if ($ token )
40
43
{
41
- return "不支持等OAuth类型。 " ;
44
+ $ _SESSION ['weibo_token ' ] = $ token ;
45
+ $ client = new \SaeTClientV2 ($ conf ['appid ' ], $ conf ['skey ' ], $ token ['access_token ' ]);
46
+ $ uid = $ client ->get_uid ();
47
+ $ userinfo = $ client ->show_user_by_id ($ uid ['uid ' ]);
48
+ if (!isset ($ userinfo ['id ' ]))
49
+ {
50
+ return "请求错误. " ;
51
+ }
52
+ $ model = createModel ('UserInfo ' );
53
+ $ username = 'sina_ ' . $ userinfo ['id ' ];
54
+ $ u = $ model ->get ($ username , 'username ' );
55
+ //不存在,则插入数据库
56
+ if (!$ u ->exist ())
57
+ {
58
+ $ u ['username ' ] = $ username ;
59
+ $ u ['nickname ' ] = $ userinfo ['name ' ];
60
+ $ u ['avatar ' ] = $ userinfo ['avatar_large ' ];
61
+ $ u ['blog ' ] = $ userinfo ['url ' ];
62
+ list ($ u ['province ' ], $ u ['city ' ]) = explode (' ' , $ userinfo ['location ' ]);
63
+ //插入到表中
64
+ $ u ['id ' ] = $ model ->put ($ u );
65
+ }
66
+ else
67
+ {
68
+ $ u ->nickname = $ userinfo ['name ' ];
69
+ $ u ->avatar = $ userinfo ['avatar_large ' ];
70
+ $ u ->blog = $ userinfo ['url ' ];
71
+ $ u ->save ();
72
+ }
73
+ //写入SESSION
74
+ $ _SESSION ['isLogin ' ] = 1 ;
75
+ $ _SESSION ['user_id ' ] = $ u ['id ' ];
76
+ $ _SESSION ['user ' ] = $ u ;
77
+ $ this ->setLoginStat ();
78
+ $ this ->http ->redirect (WEBROOT ."/person/index/ " );
42
79
}
43
- }
80
+ }
44
81
45
- function oauth_callback ()
46
- {
82
+ function callback_qq ()
83
+ {
47
84
session ();
48
- if ($ _SESSION [ ' oauth_serv ' ] == ' sina ' )
85
+ if (empty ( $ _GET [ ' code ' ]) )
49
86
{
50
- $ conf = $ this ->config [ ' oauth ' ][ ' weibo ' ] ;
51
- $ oauth = new \ WeiboOAuth ( $ conf [ ' appid ' ], $ conf [ ' skey ' ], $ _SESSION [ ' oauth_keys ' ][ ' oauth_token ' ], $ _SESSION [ ' oauth_keys ' ][ ' oauth_token_secret ' ]) ;
52
- $ _SESSION [ ' last_key ' ] = $ oauth -> getAccessToken ( $ _REQUEST [ ' oauth_verifier ' ]);
87
+ $ this ->http -> redirect ( ' /page/login/ ' ) ;
88
+ return ;
89
+ }
53
90
54
- $ client = new \WeiboClient ($ conf ['appid ' ], $ conf ['skey ' ], $ _SESSION ['last_key ' ]['oauth_token ' ],
55
- $ _SESSION ['last_key ' ]['oauth_token_secret ' ]);
56
- $ userinfo = $ client ->verify_credentials ();
57
- if (!isset ($ userinfo ['id ' ]))
91
+ $ conf = $ this ->config ['oauth ' ]['qq ' ];
92
+ Swoole \Loader::addNameSpace ('ZenAPI ' , APPSPATH . '/include/zenapi ' );
93
+ $ oauth = new QqOAuth2 ($ conf ['appid ' ], $ conf ['skey ' ]);
94
+ $ keys ['code ' ] = $ _GET ['code ' ];
95
+ $ keys ['redirect_uri ' ] = $ conf ['callback ' ];
96
+
97
+ $ token = $ oauth ->getAccessToken ('code ' , $ keys );
98
+ if ($ token )
99
+ {
100
+ $ openid = $ oauth ->getOpenid ($ token ['access_token ' ]);
101
+ $ _SESSION ['qq_token ' ] = $ token ;
102
+ $ client = new QqClient ($ token ['access_token ' ], $ conf ['appid ' ], $ openid ['openid ' ]);
103
+ $ userinfo = $ client ->get ('user/get_user_info ' );
104
+ if (!isset ($ userinfo ['ret ' ]) and $ userinfo ['ret ' ] != 0 )
58
105
{
59
- return "请求错误: " . var_export ( $ userinfo, $ conf , $ _SESSION , true ) ;
106
+ return "请求错误. 错误码: { $ userinfo[ ' ret ' ]}\n" ;
60
107
}
61
- $ model = createModel ('UserInfo ' );
62
- $ username = 'sina_ ' .$ userinfo ['id ' ];
63
- $ u = $ model ->get ($ username ,'username ' )->get ();
64
- //不存在,则插入数据库
65
- if (empty ($ u ))
66
- {
67
- $ u ['username ' ] = $ username ;
68
- $ u ['nickname ' ] = $ userinfo ['name ' ];
69
- $ u ['avatar ' ] = $ userinfo ['profile_image_url ' ];
70
- list ($ u ['province ' ],$ u ['city ' ]) = explode (' ' ,$ userinfo ['location ' ]);
71
- //插入到表中
72
- $ u ['id ' ] = $ model ->put ($ u );
73
- }
74
- //写入SESSION
75
- $ _SESSION ['isLogin ' ] = 1 ;
76
- $ _SESSION ['user_id ' ] = $ u ['id ' ];
77
- $ _SESSION ['user ' ] = $ u ;
78
- $ this ->setLoginStat ();
108
+ $ model = createModel ('UserInfo ' );
109
+ $ username = $ openid ['openid ' ];
110
+ $ u = $ model ->get ($ username , 'username ' );
111
+ //不存在,则插入数据库
112
+ if (!$ u ->exist ())
113
+ {
114
+ $ u ['username ' ] = $ username ;
115
+ $ u ['nickname ' ] = $ userinfo ['nickname ' ];
116
+ $ u ['avatar ' ] = $ userinfo ['figureurl_2 ' ];
117
+ $ u ['birth_year ' ] = $ userinfo ['year ' ];
118
+ $ u ['province ' ] = $ userinfo ['province ' ];
119
+ $ u ['city ' ] = $ userinfo ['city ' ];
120
+ $ u ['sex ' ] = $ userinfo ['gender ' ] == '男 ' ? 1 : 2 ;
121
+ //插入到表中
122
+ $ u ['id ' ] = $ model ->put ($ u );
123
+ }
124
+ else
125
+ {
126
+ $ u ->nickname = $ userinfo ['nickname ' ];
127
+ $ u ->avatar = $ userinfo ['figureurl_2 ' ];
128
+ $ u ->province = $ userinfo ['province ' ];
129
+ $ u ->city = $ userinfo ['city ' ];
130
+ $ u ->save ();
131
+ }
132
+ //写入SESSION
133
+ $ _SESSION ['isLogin ' ] = 1 ;
134
+ $ _SESSION ['user_id ' ] = $ u ->_current_id ;
135
+ $ _SESSION ['user ' ] = $ u ;
136
+ $ this ->setLoginStat ();
79
137
$ this ->http ->redirect (WEBROOT ."/person/index/ " );
80
138
}
81
- }
139
+ }
82
140
83
141
function flist ()
84
142
{
@@ -233,12 +291,29 @@ function login()
233
291
}
234
292
else
235
293
{
236
- $ this ->swoole ->tpl ->display ();
294
+ $ conf = $ this ->config ['oauth ' ]['weibo ' ];
295
+ $ weibo_oauth = new \SaeTOAuthV2 ($ conf ['appid ' ], $ conf ['skey ' ]);
296
+ $ weibo_login_url = $ weibo_oauth ->getAuthorizeURL ($ conf ['callback ' ]);
297
+
298
+ Swoole \Loader::addNameSpace ('ZenAPI ' , APPSPATH . '/include/zenapi ' );
299
+ $ conf = $ this ->config ['oauth ' ]['qq ' ];
300
+ $ qq_oauth = new QqOAuth2 ($ conf ['appid ' ], $ conf ['skey ' ]);
301
+ $ qq_login_url = $ qq_oauth ->getAuthorizeURL (array (
302
+ 'client_id ' => $ conf ['appid ' ],
303
+ 'redirect_uri ' => $ conf ['callback ' ],
304
+ 'response_type ' => 'code ' ,
305
+ 'display ' => null ,
306
+ 'scope ' => $ conf ['scope ' ],
307
+ ));
308
+ $ this ->tpl ->assign ('weibo_login_url ' , $ weibo_login_url );
309
+ $ this ->tpl ->assign ('qq_login_url ' , $ qq_login_url );
310
+ $ this ->tpl ->display ();
237
311
}
238
312
}
239
313
240
314
function logout ()
241
315
{
316
+ $ this ->http ->setcookie ('uname ' , '' , null , '/ ' , 'swoole.com ' );
242
317
$ this ->user ->logout ();
243
318
$ this ->swoole ->http ->redirect ('/page/login/ ' );
244
319
}
@@ -451,7 +526,7 @@ function user()
451
526
private function setLoginStat ()
452
527
{
453
528
$ tm = time ();
454
- Swoole \Cookie::set ('uname ' , $ _SESSION ['user ' ]['nickname ' ], $ tm+ 86400 * 30 ,'/ ' );
455
- Swoole \Cookie::set ('uid ' , $ _SESSION ['user_id ' ], $ tm+ 86400 * 30 ,'/ ' );
529
+ Swoole \Cookie::set ('uname ' , $ _SESSION ['user ' ]['nickname ' ], $ tm + 86400 * 30 , '/ ' );
530
+ Swoole \Cookie::set ('uid ' , $ _SESSION ['user_id ' ], $ tm + 86400 * 30 , '/ ' );
456
531
}
457
532
}
0 commit comments