2

我对如何从 Facebook 实现 access_token 检索感到困惑。这就是我的想法:

  1. 一个 OAuthorizer 类,负责 OAuth 身份验证。它会启动一个 WebView 窗口,该窗口将要求用户对我的应用程序进行身份验证。成功认证后,此类将存储并提供 Facebook 提供的短期用户 access_token。此类的 authorize() 方法必须启动 QML 窗口,因此涉及一些 UI 代码。
  2. TokenService 类包含根据短期用户 access_token 检索不同类型的 access_token 的方法——如长期用户 access_token、page_token 等)这将是一个纯 C++ 类,无需处理任何 QML 组件。

这是代码的粗略草图。请注意,它可能在语法上不正确——我是即时写的。

class OAuthorizer :: QObject
{
  Q_OBJECT

  public:
    OAuthorizer();
    QString accessToken() const;
    void authorize(); // This method will launch a QML component containing WebView, which will authenticate and emit an authSuccessful signal.

  public slots:
    void onSuccessfulAuth(const QUrl &url); // This slot will be invoked by authSuccessful signal and will parse the redirected URL for short-lived access_token.

  private:
    QString accessToken;
    // Other fields like redirectUrl, facebookAuthUrl, appId.
}

class TokenService :: QObject
{
  Q_OBJECT

  public:
    TokenService();
    QString fetchLongLivedToken(QString shortLivedUserToken);
    QStringList fetchPageTokens(QString userToken);

  private:
    QString longLivedTokenUrl;
    QString pageTokenUrl;
}

我感觉不好的部分是 OAuthorizer 类。它不可避免地包含与 UI 相关的代码,以便启动 QML 窗口。这是一个好主意/设计吗?

所以我认为这个设计有很大的缺陷。我会欢迎一个全新的,如果更好的设计以及对此的改进。

4

0 回答 0