gpt4 book ai didi

ios - 即使从 Facebook 应用程序设置中删除应用程序后,用户仍可以访问应用程序

转载 作者:搜寻专家 更新时间:2023-11-01 05:40:05 25 4
gpt4 key购买 nike

我有一个同时使用 Parse 和 FacebookSDK 的应用程序。目前遇到的问题是,即使转到他们的 Facebook 帐户应用程序设置并删除我的应用程序以访问他们的 Facebook 数据,用户仍然能够访问我的应用程序。

所以:
1:新用户进行全新安装。
2:用户通过 Facebook 登录注册并访问应用程序
3:用户转到 Facebook.com>应用设置>删除我的应用
4:回到 iPhone,用户关闭应用程序,重新打开并再次获得访问权限

这是我检查用户当前状态的地方,如果他们持有 currentAccessToken

则允许他们访问
override func viewDidLoad() {
super.viewDidLoad()

if FBSDKAccessToken.currentAccessToken() != nil{
moveToNextView() //Segue to next viewController
}
}

还有我的AppDelegate.swift:

import UIKit
import Parse

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

var window: UIWindow?

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject : AnyObject]?) -> Bool {

Parse.setApplicationId("ID", clientKey:"KEY")
PFFacebookUtils.initializeFacebookWithApplicationLaunchOptions(launchOptions)
FBSDKProfile.enableUpdatesOnAccessTokenChange(true)


return FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions)
}


func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject?) -> Bool {
return FBSDKApplicationDelegate.sharedInstance().application(application, openURL: url, sourceApplication: sourceApplication, annotation: annotation)
}
}

我猜 currentAccessToken 缓存在应用或设备的某处,但不确定如何清除/刷新该缓存。

最佳答案

我已经找到了解决这个问题的方法。它并不像人们想象的那么简单。 Facebook 开发人员控制台允许您设置取消授权回调 URL,可在此处找到:

  1. 在 Facebook 开发者控制面板中选择您的应用
  2. 点击侧面菜单上的 Facebook 登录
  3. 点击设置
  4. 然后您可以提供取消授权回调 URL

每当有人从 Facebook 删除您的应用程序时,它都会生成一个带有签名请求参数的 POST 到您的回调 URL。您可以解析已签名的请求以检索用户的 facebookid。获得用户的 facebookid 后,您可以更新数据库中的记录,您可以使用该记录检查他们的下一次登录。

下面是一个 PHP 示例,说明如何处理取消授权回调

<?php

function parse_signed_request($signed_request) {
list($encoded_sig, $payload) = explode('.', $signed_request, 2);

$secret = "appsecret"; // Use your app secret here

// decode the data
$sig = base64_url_decode($encoded_sig);
$data = json_decode(base64_url_decode($payload), true);

// confirm the signature
$expected_sig = hash_hmac('sha256', $payload, $secret, $raw = true);
if ($sig !== $expected_sig) {
error_log('Bad Signed JSON signature!');
return null;
}

return $data;
}


$signed_request = $_POST['signed_request'];
$data = parse_signed_request($signed_request);
$user_id = $data['user_id'];

//now use the user_id to look up your user in your database
//update a field called deauthorized to true so that you
//can check this value upon next login

?>

现在,下次您检查您的访问 token 时,包括检查您的数据库以查看用户是否已删除该应用程序。

- (void)viewDidLoad
{
[super viewDidLoad];
if ([FBSDKAccessToken currentAccessToken]) {
// User is logged in, but they may have
// removed the app so we have to check our
// db using a REST API call to see if is deauthorized

// If the user has deauthorized then log them out
// send them back to the login/signup page
// if not, carry on as usual

//also don't forget to set the deauthorized value to 0
//whenever a user successfully logs into facebook

}
}

希望这对将来的人有所帮助。

关于ios - 即使从 Facebook 应用程序设置中删除应用程序后,用户仍可以访问应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31757383/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com