pod*_*dek 3 php authentication facebook
简单的facebook应用程序与数据库服务器通信(使用包装器).出于安全原因,需要检查询问服务器某些操作的用户是否真的是他的id的所有者(在请求中发送).
为此,对服务器的请求包含来自基于javascript SDK的Web应用程序的access_token和user的id.我想检查访问令牌的所有者的ID和用户的ID是否相同.第一步是从Facebook获取访问令牌的所有者的ID.使用代码:
class SessionValidator {
private $userId; //id of user
private $accessToken; //facebook user's access token
private $fb;
public function __construct($userId, $accessToken){
$this->userId = $userId;
$this->accessToken = $accessToken;
$app_id = @appId;
$app_secret = @secret;
$fb = new Facebook(array('appId' => $app_id, 'secret' => $app_secret));
$fb->setAccessToken($accessToken);
$this->fb = $fb;
}
public function authUserSession(){
$url = 'https://graph.facebook.com/';
$data['fields'] = $this->userId;
$data['access_token'] = $this->accessToken;
$response = $this->post_request($url, $data);
return $response;
}
private function post_request($url, $data){
return $this->fb->api('/me', 'POST', $data);
}
}
Run Code Online (Sandbox Code Playgroud)
Facebook一直在回应:
未捕获的OAuthException:(#10)应用程序没有此操作的权限
如果我删除了行,则相同的响应:$fb->setAccessToken($accessToken);
.我确定appId和appSecure是正确的.客户端应用程序和服务器端应用程序都将在不同的主机,但两个域添加为应用的领域,在Facebook开发者网站.知道为什么我收到这个错误吗?
问题出在你打电话的时候!
您应该GET
提出请求而不是POST
请求.
您的fields
密钥也应该是id
其值而不是用户的ID.
这是一个固定版本:
class SessionValidator {
private $userId; //id of user
private $accessToken; //facebook user's access token
private $fb;
public function __construct($userId, $accessToken){
$this->userId = $userId;
$this->accessToken = $accessToken;
$app_id = @appId;
$app_secret = @secret;
$fb = new Facebook(array('appId' => $app_id, 'secret' => $app_secret));
$fb->setAccessToken($accessToken);
$this->fb = $fb;
}
public function authUserSession(){
$url = 'https://graph.facebook.com/';
$data['fields'] = 'id';
$data['access_token'] = $this->accessToken;
$response = $this->get_request($url, $data);
return $response;
}
private function get_request($url, $data){
return $this->fb->api('/me', 'GET', $data);
}
}
Run Code Online (Sandbox Code Playgroud)
如果你做了一个有价值的GET
请求fields
作为你的User's ID
ie $this->userId
然后它会返回一个错误说:
(#100)未知字段:[您传递的用户ID]
编辑:这是您可以用来验证用户ID的另一个版本.如果用户标识与facebook返回的用户标识匹配,则该方法将返回true或false.如果您正在使用返回的响应执行其他操作,那么这可能不是适合您的版本,您可以使用上述版本.
class SessionValidator {
private $userId; //id of user
private $accessToken; //facebook user's access token
private $fb;
public function __construct($userId, $accessToken){
$this->userId = $userId;
$this->accessToken = $accessToken;
$app_id = @appId;
$app_secret = @secret;
$fb = new Facebook(array('appId' => $app_id, 'secret' => $app_secret));
$fb->setAccessToken($accessToken);
$this->fb = $fb;
}
public function authUserSession(){
$url = 'https://graph.facebook.com/';
$data['fields'] = 'id';
$data['access_token'] = $this->accessToken;
$response = $this->get_request($url, $data);
if($this->userId == $response['id']) {
return true;
}
return false;
}
private function get_request($url, $data){
return $this->fb->api('/me', 'GET', $data);
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3854 次 |
最近记录: |