ruby-on-rails – 用于Rails API中的提供程序身份验证的Omniauth
发布时间:2020-12-17 02:18:13 所属栏目:百科 来源:网络整理
导读:我已经让omniauth在我的网络应用程序上完美运行.我还为我们的iPhone应用程序创建了一个API进行交互,我试图让omniauth工作. 有没有办法将访问令牌(从与Facebook.app的集成iOS集成接收)传递给omniauth以在数据库中创建提供者条目? 现在在我的网络应用程序中,
我已经让omniauth在我的网络应用程序上完美运行.我还为我们的iPhone应用程序创建了一个API进行交互,我试图让omniauth工作.
有没有办法将访问令牌(从与Facebook.app的集成iOS集成接收)传递给omniauth以在数据库中创建提供者条目? 现在在我的网络应用程序中,我有一个带有以下代码的身份验证控制器 def create omniauth = request.env["omniauth.auth"] user = User.where("authentications.provider" => omniauth['provider'],"authentications.uid" => omniauth['uid']).first if user session[:user_id] = user.id flash[:notice] = t(:signed_in) redirect_to root_path elsif current_user user = User.find(current_user.id) user.apply_omniauth(omniauth) user.save flash[:notice] = t(:success) redirect_to root_path else session[:omniauth] = omniauth.except('extra') flash[:notice] = "user not found,please signup,or login. Authorization will be applied to new account" redirect_to register_path end end 解决方法
在我的API用户控制器中,我创建了以下内容:
def create @user = User.new(params[:user]) @user.save # Generate data for omni auth if they're a facebook user if params[:fb_access_token] graph = Koala::Facebook::API.new(params[:fb_access_token]) profile = graph.get_object('me') @user['fb_id'] = profile['id'] @user['fb_token'] = params[:fb_access_token] @user['gender'] = profile['gender'] # Generate omnihash omnihash = Hash.new omnihash['provider'] = 'facebook' omnihash['uid'] = profile['id'] omnihash['info'] = Hash.new omnihash['info']['nickname'] = profile['username'] omnihash['info']['name'] = profile['name'] omnihash['info']['email'] = profile['email'] omnihash['info']['first_name'] = profile['first_name'] omnihash['info']['last_name'] = profile['last_name'] omnihash['info']['verified'] = profile['verified'] omnihash['info']['urls'] = Hash.new omnihash['info']['urls']['Facebook'] = profile['link'] omnihash['credentials'] = Hash.new omnihash['credentials']['token'] = params[:fb_access_token] omnihash['extra'] = Hash.new omnihash['extra']['raw_info'] = Hash.new puts omnihash # Save the new data @user.apply_omniauth(omnihash) @user.save end (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |