我正在创建一个 Canvas Facebook 应用程序。在此画布中,我想展示一个使用 rails (v.3.2.8) 构建的应用程序,该应用程序的身份验证部分由 Devise 2.1.2 管理。我遵循了有关服务器端身份验证的 Facebook 文档。
我的画布 url 是一个控制器操作,它执行以下操作: - 获取 facebook signed_request,对其进行解码,重定向到 facebook 授权请求页面 - 一旦用户授权应用程序,并且 facebook 令牌被发送回我的画布 url,我获取用户信息,将它们保存在我的用户模型中并使用设计登录用户。
我的问题是:即使在我登录用户之后,我在画布 chrome 中看到的只是退出页面。即使用户正确保存在数据库中,登录步骤也不起作用,当我检查会话时,它是空的?
有人可以帮我吗?谢谢。这是画布动作的代码:
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