问题描述
在我的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,本机应用程序支持本机移动流。