Facebook graph api Facebook桌面应用中OAuth的实现设计

Facebook graph api Facebook桌面应用中OAuth的实现设计,facebook-graph-api,oauth-2.0,qt5,qtquick2,Facebook Graph Api,Oauth 2.0,Qt5,Qtquick2,我对如何从Facebook实现访问令牌检索感到困惑。 我是这样想的: OAuthorizer类,负责OAuth身份验证。它启动WebView窗口,要求用户验证我的应用程序。成功验证后,此类将存储并提供Facebook提供的短期用户访问令牌。此类的authorize()方法必须启动QML窗口,因此需要一些UI代码 ToKeService类包含基于短时间用户访问令牌(如艺龙网的Access令牌、PGEGY令牌等)检索不同类型的Access令牌的方法。这将是一个纯C++类,而不必处理任何QML组件。

我对如何从Facebook实现访问令牌检索感到困惑。 我是这样想的:

  • OAuthorizer类,负责OAuth身份验证。它启动WebView窗口,要求用户验证我的应用程序。成功验证后,此类将存储并提供Facebook提供的短期用户访问令牌。此类的authorize()方法必须启动QML窗口,因此需要一些UI代码
  • ToKeService类包含基于短时间用户访问令牌(如艺龙网的Access令牌、PGEGY令牌等)检索不同类型的Access令牌的方法。这将是一个纯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类。为了启动QML窗口,它不可避免地包含与UI相关的代码。这是个好主意/设计吗

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