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

问题描述

在我的Rails Web项目中,用户通过Twitter进行身份验证。 oauth流程涉及用户,它通过Twitter Web表单输入Twitter登录凭据,并且效果很好。我想知道用户是否可以通过Twitter的移动应用程序授权我的Web项目。

因此,基本上,当用户访问我的Web项目并单击“使用Twitter登录”时,如果用户已安装,则授权过程应在Twitter的移动应用程序中进行,否则它将使用Web表单。我只在潜望镜移动应用程序中看到过这种可能性,其中Twitter的授权发生在twitter的移动应用程序中。因为我的项目是基于Web的,所以这甚至可能吗?有趣的是,我在我的Web项目中有一个指向我的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的电话应用程序进行身份验证和授权。

解决方法

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