From 214d05fc296483cfc1fb27b7e7dd5310216d9953 Mon Sep 17 00:00:00 2001 From: overtrue Date: Sun, 26 Apr 2015 18:21:55 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8E=88=E6=9D=83=E9=A1=B5=E6=96=87=E6=A1=A3?= =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 网页授权.md | 70 +++++++++++++++++++++++++++++------------------------ 1 file changed, 39 insertions(+), 31 deletions(-) diff --git a/网页授权.md b/网页授权.md index cb49cad..d264f43 100644 --- a/网页授权.md +++ b/网页授权.md @@ -1,4 +1,19 @@ +## 注意:`Auth` 服务不缓存 `access_token`,在获取到用户信息后请自己缓存当前用户信息,不要每次都直接请求 `$auth->authorize()`; + +通常的逻辑应该是: + +1. 检查你自己的 Session 中是否有登录信息,如果有则不跳授权页面 +2. 如果 Session 中没有登录信息,则跳转到授权页并获取用户信息(`$auth->authorize()` 一个方法全搞定) +3. 把拿到的用户信息存到 Session 中 + + - 有 SESSION -> **最终业务界面** + - 没有 SESSION -> 用户**最终业务界面** -> **授权页** 完成授权存 SESSION -> 跳转到你的**最终业务界面** + +## 友情提示 + +授权逻辑不要写在业务页!!! 不然你分享出去的链接会带你自己的 `code` 出去,这样就会判断不了是否已经授权。 + ```php authorize(); // 返回用户 Bag + $_SESSION['logged_user'] = $user; + // 跳转到其它授权才能访问的页面 +} + +var_dump($_SESSION['logged_user']); +``` + +### 其它单独使用的方法 + + 生成授权链接 ```php @@ -17,7 +55,7 @@ $auth = new Auth($appId, $secret); $auth->url($to, $scope, $state = 'STATE'); // 直接跳转 - $auth->redirect($to, $scope, $state = 'STATE'); 直接跳转 + $auth->redirect($to, $scope, $state = 'STATE'); // 直接跳转 ``` > 注意: @@ -36,41 +74,11 @@ $url = $auth->url('http://overtrue.me', 'snsapi_base'); $url = $auth->url('http://overtrue.me', 'snsapi_userinfo'); ``` -+ 判断是否已经授权 - - ```php - $auth->authorized(); - ``` - + 获取已授权用户 ```php $auth->user(); ``` -## 示例: - -```php -// 如果已经授权或者 SESSION 未过期 - -if ($auth->authorized() || Session::get('logged_open_id')) { - $user = $auth->user();// 获取已经登录后用户信息 - Session::set('logged_open_id', $user['open_id']); - - //code 显示授权后的页面,或者跳转到其它授权才能访问的页面 - //... -} else { - $to = "http://微信授权完成后跳回你的地址,就是当前代码所在的 URL"; - $auth->redirect($to); -} -``` - -### 在 [Laravel](http://laravel.com) 里使用 - -在 Laravel 里的跳转请使用 `url` 而不要使用 `redirect`, 因为在 Laravel 控制器方法必须返回字符串或者实现了 `__toString()` 的对象: - -```php -return Redirect::to($auth->url($to, 'snsapi_base', 'STATE')); -``` 更多关于微信网页授权 API 请参考: http://mp.weixin.qq.com/wiki/17/c0f37d5704f0b64713d5d2c37b468d75.html \ No newline at end of file