授权页文档更新

overtrue 2015-04-26 18:21:55 +08:00
parent 74a086cba4
commit 214d05fc29

@ -1,4 +1,19 @@
## 注意:`Auth` 服务不缓存 `access_token`,在获取到用户信息后请自己缓存当前用户信息,不要每次都直接请求 `$auth->authorize()`;
通常的逻辑应该是:
1. 检查你自己的 Session 中是否有登录信息,如果有则不跳授权页面
2. 如果 Session 中没有登录信息,则跳转到授权页并获取用户信息(`$auth->authorize()` 一个方法全搞定)
3. 把拿到的用户信息存到 Session 中
- 有 SESSION -> **最终业务界面**
- 没有 SESSION -> 用户**最终业务界面** -> **授权页** 完成授权存 SESSION -> 跳转到你的**最终业务界面**
## 友情提示
授权逻辑不要写在业务页!!! 不然你分享出去的链接会带你自己的 `code` 出去,这样就会判断不了是否已经授权。
```php ```php
<?php <?php
@ -10,6 +25,29 @@ $secret = 'f1c242f4f28f735d4687abb469072a29';
$auth = new Auth($appId, $secret); $auth = new Auth($appId, $secret);
``` ```
+ 授权并返回用户
`Bag authorize($to = null, $scope = 'snsapi_userinfo', $state = 'STATE')` 授权并返回用户
内部逻辑:
1. 非微信回调,会自动跳转到微信授权页,并且以当前页(`$to` 为 `null` 时取当前页)作为回调页
2. 如果已经授权返回用户对象,`$scope` 为 `snsapi_base` 时用户对象只有 `openid` 一个属性
```php
// 请一定要自己存储用户的登录信息,不要每次都授权
if (empty($_SESSION['logged_user'])) {
$user = $auth->authorize(); // 返回用户 Bag
$_SESSION['logged_user'] = $user;
// 跳转到其它授权才能访问的页面
}
var_dump($_SESSION['logged_user']);
```
### 其它单独使用的方法
+ 生成授权链接 + 生成授权链接
```php ```php
@ -17,7 +55,7 @@ $auth = new Auth($appId, $secret);
$auth->url($to, $scope, $state = 'STATE'); $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'); $url = $auth->url('http://overtrue.me', 'snsapi_userinfo');
``` ```
+ 判断是否已经授权
```php
$auth->authorized();
```
+ 获取已授权用户 + 获取已授权用户
```php ```php
$auth->user(); $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 更多关于微信网页授权 API 请参考: http://mp.weixin.qq.com/wiki/17/c0f37d5704f0b64713d5d2c37b468d75.html