【问题标题】:Log out or Switch Accounts using Parse Twitter/Facebook Authentication使用 Parse Twitter/Facebook 身份验证注销或切换帐户
【发布时间】:2017-08-28 21:39:22
【问题描述】:

我正在使用 parse.com 的 Android API 并添加了 Facebook/Twitter 登录支持。这工作正常。

棘手的部分似乎是退出

如果我使用 Twitter 登录我的应用程序:

ParseTwitterUtils.logIn(UserLoginActivity.this, twitterLoginCallback);

或使用 Facebook:

ParseFacebookUtils.logInWithReadPermissionsInBackground(UserLoginActivity.this, null, facebookLoginCallback);

在网络对话框中提示我输入我的 Twitter 凭据,然后允许或拒绝访问我的应用程序。一旦我允许,我就可以成功登录,并且可以访问我的屏幕名称。一切都好!

当我尝试退出我的 ParseUser 时,我确实退出了。但是,如果我再次点击 Facebook 或 Twitter 登录按钮,我会被预先验证为我以前的帐户,我无法切换帐户。

我试过了:

  • 检查 Chrome 和浏览器,但均未登录 Twitter。
  • 退出本机 Twitter/Facebook 应用程序

我的登录逻辑很简单:

ParseUser.logOut();

对于 Twitter 我已经尝试过

  • 卸载我的应用程序 - 这确实可以解决问题,但不是理想的解决方案。
  • 没有按照这里的建议在我的Application 中调用Parse.enableLocalDatastore(this);https://stackoverflow.com/a/26338326/494356
  • 按照此处的建议取消链接 Twitter 帐户:https://stackoverflow.com/a/34052718/494356。这也有每次创建一个新的 ParseUser 的不良副作用(但仍然是同一个 Twitter 帐户)
  • 我已尝试按照此处https://stackoverflow.com/a/27714159/494356 的建议将权限从“只读”更改为“读写”。 (无论如何,这对我来说并不重要)
  • 我已尝试将 AuthToken 设置为 null ParseTwitterUtils.getTwitter().setAuthToken(null); ParseTwitterUtils.getTwitter().setAuthTokenSecret(null);

对于 Facebook 我已经尝试过

  • 卸载我的应用程序 - 这不能解决问题。
  • 使用 Facebook SDK 注销功能:

    AccessToken.setCurrentAccessToken(null);

    Profile.setCurrentProfile(null);

    LoginManager.getInstance().logOut();

  • 曾经有一个Session.closeAndClearTokenInformation(),建议here。但是 Facebook 有 Deprecated the Session class,它不再在 SDK 中。

  • 按照here 的建议取消链接 Facebook 帐户。这再次导致 ParseUser 重复,我仍然可以使用保存的凭据登录。

如果有任何答案或建议,我将不胜感激。即使你只能回答 Twitter 或 Facebook,但不能同时回答这两个问题,我仍然很乐意听到它。

【问题讨论】:

  • 我现在很好奇,因为您提到了我对另一个类似问题的回答,即您的应用程序的用例是什么?你想拥有什么样的行为?您是否希望解析用户始终保持不变并让用户使用多个 Twitter 帐户来访问同一个解析用户?这只是为了测试目的吗?基本上,我无法理解哪种类型的应用程序希望他们的用户必须执行您所描述的操作。
  • @craigts 我的用例是这样的:我想使用我的 Twitter 帐户登录以使用该应用程序。我的朋友来了,想试试。我退出了我的应用程序,我的朋友可以使用他们的 Twitter 帐户登录。当我的朋友退出时,如果我们中的任何一个再次登录,我们将获得原来的帐户。
  • 深入研究文档,看来 parse 肯定不支持这种情况。我认为针对这个问题的唯一解决方案是 1)错误解析来实现这个用例,2)自己更改解析代码,或者 3)自己手动处理 Twitter 和 Facebook 身份验证。避免此问题的建议是尝试设置您的应用程序,以便您的场景中的“朋友”自己下载和试用应用程序更有意义。也许为用户和他们的朋友提供某种激励。
  • @craigts 这个用例似乎是处理身份验证的唯一合理方法。如果我作为用户注销我的应用程序,我希望被注销。我不希望任何人能够只单击“使用 Facebook/Twitter 登录”并在没有任何确认的情况下立即被带回。如果我使用错误的 Twitter 帐户登录怎么办?不卸载应用就无法切换?这似乎很愚蠢。很抱歉,如果这听起来有争议,我根本不是那个意思。感谢您的帮助!
  • 我也面临同样的问题。我希望你能解决这个问题。你能帮我解决这个问题吗?

标签: android facebook authentication twitter parse-platform


【解决方案1】:

在我们的应用程序中,登录/注销过程适用于 Facebook、电子邮件甚至是自己构建的 google 登录。我可以告诉你我第一眼看到的不同之处,也许其中一个对你有用。

首先,我们不直接在代码中使用ParseUser 实例,而是有一个扩展ParseUserMyUser 类。 其次,登录逻辑被封装在后台服务中,而不是直接在我们的 Activity 中调用。那可能无法解决问题。但是在后台服务中,我们还缓存了MyUser 实例,如果需要它就检索它并使用该实例注销用户(MyUser.logOut())。并且注销后设置为null

最后但同样重要的是:您运行的是最新版本的 Parse SDK 吗?

【讨论】:

  • 我还有一个扩展 ParseUser 的类。不管是在Activity还是Service中调用,调用logOutInBackground()应该是一样的,但我会试一试。我正在使用最新版本的 Parse SDK (1.11.0)。
猜你喜欢
  • 2021-05-24
  • 1970-01-01
  • 2016-02-23
  • 2018-12-29
  • 2016-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多