加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读