如果存在移动应用而不是 Web 表单,则 Twitter OAuth 应打开移动应用以进行授权

Posted

技术标签:

【中文标题】如果存在移动应用而不是 Web 表单,则 Twitter OAuth 应打开移动应用以进行授权【英文标题】:Twitter OAuth should open mobile app for authorization if the mobile app is present instead of the web form 【发布时间】:2021-02-22 21:16:47 【问题描述】:

在我的 rails web 项目中,用户使用 twitter 进行身份验证。 oauth 过程涉及用户,通过 twitter 网络表单输入 twitter 登录凭据,这很有效。如果用户安装了 twitter 的移动应用程序,我想知道用户是否可以通过 twitter 的移动应用程序授权我的 web 项目。

所以基本上,当用户访问我的 Web 项目并点击“使用 twitter 登录”时,如果用户安装了 twitter 的移动应用程序,则授权过程应该发生在该应用程序中,否则它使用 Web 表单。我只在 periscope 移动应用程序中看到了这种可能性,其中对 twitter 的授权发生在 twitter 的移动应用程序中。由于我的项目是基于网络的,这甚至可能吗?有趣的是,我的网络项目中有一个指向我的 Twitter 个人资料的链接,当我点击该链接时,它会打开我的移动 Twitter 应用程序。

这是我在 Rails 应用程序中的当前 oauth 进程。这是来自我的用户模型的相关代码

 def self.from_omniauth(auth)
    user = find_or_initialize_by(provider: auth.provider, uid: auth.uid)
    user.email = auth.info.email
    user.password = Devise.friendly_token[0, 20]
    user.name = auth.info.name
    user.username = auth.info.nickname
    user.location = auth.info.location
    user.access_token = auth.credentials.token
    user.access_secret = auth.credentials.secret
    user.access_token = user.encrypt_field(user.access_token)
    user.access_secret = user.encrypt_field(user.access_secret)
    user.save!
    return user
  end

在我的用户控制器中,我有

 def twitter
    @user = User.from_omniauth(request.env["omniauth.auth"])
    if @user.persisted?
      sign_in_and_redirect @user, event: :authentication #this will throw if @user is not activated
      set_flash_message(:notice, :success, kind: "Twitter") if is_navigational_format?
    else
      session["devise.twitter_data"] = request.env["omniauth.auth"].except("extra")
      redirect_to new_user_registration_url
    end
  end

在我的 gemfile 中,我有

gem 'devise'
gem 'omniauth'
gem 'omniauth-twitter'
gem 'twitter'

这适用于基于 Web 表单的身份验证。如果用户安装了 twitter 的手机应用程序,我想知道如何或是否可以通过 twitter 的手机应用程序进行身份验证和授权。

【问题讨论】:

【参考方案1】:

对于基于 Web 的流程,OAuth 流程将在 Twitter 网站上进行,而不是在应用程序上进行。使用现已弃用的 TwitterKit 的原生应用程序支持原生移动流。

【讨论】:

感谢您的回答。我想知道如果潜望镜应用程序被弃用,为什么以及如何实现此功能?我认为,如果 twitter 将这一功能恢复到所有应用程序,而不仅仅是潜望镜,它将改善客户体验。 目前正在研究改进 OAuth 流程,这是我们在 OAuth 2.0 上工作的一部分。如果您想分享有关如何改善您的体验的更多详细信息,请随时在Feedback channel for authentication 中添加建议。

以上是关于如果存在移动应用而不是 Web 表单,则 Twitter OAuth 应打开移动应用以进行授权的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 4 表单验证在更新表单上应该是唯一的,但如果是当前的则不是

移动应用中的OAuth秘密

是否可以显示表单而不是 asp.net Web 应用程序的质询/响应弹出窗口?

使用npm twit将图像上传到Twitter时“媒体类型无法识别”

如果后台堆栈中已经存在,则恢复 Activity 而不是启动

Flutter:如果存在则获取提供者,否则返回null而不是异常