在Facebook Canvas中使用Devise进行身份验证

时间:2012-10-08 10:52:40

标签: ruby-on-rails facebook ruby-on-rails-3 devise

我正在创建一个Canvas Facebook应用程序。在这个画布中,我想展示一个带有rails(v.3.2.8)应用程序的构建,该认证部分由Devise 2.1.2管理。我在服务器端身份验证上关注了Facebook文档。

我的画布网址是一个控制器操作,执行以下操作:   - 获取facebook signed_request,解码,重定向到facebook授权请求页面   - 一旦用户授权该应用程序,并将facebook令牌发送回我的画布URL,我将获取用户信息,将其保存在我的用户模型中并使用设计方式登录用户。

我的问题是:即使我签到用户后,我在canvas chrome中看到的只是注销页面。即使用户在数据库中正确保存,sign_in步骤也不起作用,当我检查会话时,它是空的?

有人可以帮我吗?谢谢。这是canvas动作的代码:

def canvas
    @encoded_sig, @payload = params[:signed_request].split('.')
    @payload += '=' * (4 - @payload.size.modulo(4))
    # Decode the signed_request parameter
    @signature = Base64.decode64(@encoded_sig)
    @datas = JSON.parse(Base64.decode64(@payload))
    # TODO Check Encoding Algorithm
    # TODO Check Signature
    if( !@datas.has_key?("user_id") && !@datas.has_key?("oauth_token") )
      @oauth_url = "https://www.facebook.com/dialog/oauth/?client_id=#{@facebook_config[:app_id]}&redirect_uri=#{@facebook_config[:canvas_page_url]}&scope=email,user_location,user_relationships"
      # render
    else
      user_datas = FbGraph::User.me(@datas["oauth_token"]).fetch
      @user = User.find_by_email(user_datas.email)
      if @user.nil?
        @user = User.new(first_name: user_datas.first_name, last_name: user_datas.last_name, email: user_datas.email , password: SecureRandom.hex(10), terms: true, fb_uid: user_datas.raw_attributes[:id], access_token: @datas["oauth_token"])
        @user.save!
        @user.confirm!
        @user.create_coachee_profile(name: user_datas.name, gender: user_datas.gender, location: '', language: user_datas.locale, relationship_status: user_datas.relationship_status, user_id: @user.id)
        sign_in(:user, @user)
        redirect_to user_coachee_profile_url(current_user.id)
      else
        sign_in(:user, @user)
        redirect_to root_url
      end
    end
  end

0 个答案:

没有答案