Javascript 如何在Heroku生产应用程序中排除Facebook登录故障?
我很难诊断为什么我的应用程序在开发过程中运行良好的Facebook登录流在部署到Heroku时失败 简言之,流程是这样的:Facebook的内容通过React组件呈现在网站页面上。当Facebook响应登录请求时,它会转到回调控制器Javascript 如何在Heroku生产应用程序中排除Facebook登录故障?,javascript,facebook,heroku,devise,omniauth,Javascript,Facebook,Heroku,Devise,Omniauth,我很难诊断为什么我的应用程序在开发过程中运行良好的Facebook登录流在部署到Heroku时失败 简言之,流程是这样的:Facebook的内容通过React组件呈现在网站页面上。当Facebook响应登录请求时,它会转到回调控制器/users/auth/Facebook/callback。Deviate omniauth让Deviate知道如何创建注册或会话,我的应用程序中的回调代码会更新视图 以下是heroku日志的相关输出: Started GET "/users/auth/faceboo
/users/auth/Facebook/callback
。Deviate omniauth让Deviate知道如何创建注册或会话,我的应用程序中的回调代码会更新视图
以下是heroku日志的相关输出:
Started GET "/users/auth/facebook/callback" for 23.243.29.123 at 2016-04-24 14:38:36 +0000
I, [2016-04-24T14:38:36.279311 #8] INFO -- omniauth: (facebook) Callback phase initiated.
Processing by Users::OmniauthCallbacksController#facebook as JSON
User Load (1.3ms) SELECT "users".* FROM "users" WHERE "users"."provider" = $1 AND "users"."uid" = $2 ORDER BY "users"."id" ASC LIMIT 1 [["provider", "facebook"], ["uid", "10239847019823470"]]
(3.2ms) BEGIN
User Exists (2.7ms) SELECT 1 AS one FROM "users" WHERE "users"."username" = 'Fake Name' LIMIT 1
(3.1ms) ROLLBACK
Redirected to https://fakeapp.herokuapp.com/users/sign_up
因此,我在其他问题中看到的大部分内容都是正确的:
heroku运行rails c
和User。all()
不包括我试图通过Facebook登录的用户。)
作为比较,以下是我的开发应用程序的“健康”登录:
Processing by Users::OmniauthCallbacksController#facebook as JSON
User Load (6.0ms) SELECT "users".* FROM "users" WHERE "users"."provider" = $1 AND "users"."uid" = $2 ORDER BY "users"."id" ASC LIMIT 1 [["provider", "facebook"], ["uid", "102983457091284357"]]
(0.1ms) BEGIN
SQL (6.8ms) UPDATE "users" SET "last_sign_in_at" = $1, "current_sign_in_at" = $2, "sign_in_count" = $3, "updated_at" = $4 WHERE "users"."id" = $5 [["last_sign_in_at", "2016-04-24 13:59:24.953190"], ["current_sign_in_at", "2016-04-25 13:33:48.756553"], ["sign_in_count", 55], ["updated_at", "2016-04-25 13:33:48.758631"], ["id", 8]]
(5.3ms) COMMIT
Completed 200 OK in 23ms (Views: 0.4ms | ActiveRecord: 18.3ms)
这是omniauth\u callbacks\u controller.rb
:
class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController
def facebook
@user = User.from_omniauth(request.env["omniauth.auth"])
if @user.persisted?
respond_to do |format|
format.json do
sign_in @user
return render :json => @user
end
format.html do
sign_in_and_redirect @user, :event => :authentication #this will throw if @user is not activated
set_flash_message(:notice, :success, :kind => "Facebook") if is_navigational_format?
end
end
else
session["devise.facebook_data"] = request.env["omniauth.auth"]
redirect_to new_user_registration_url
end
end
end
因此,我不知道是什么导致持久化用户的尝试失败。任何关于导致失败的原因的想法,或者仅仅是关于我如何能够比仅仅通过查看Heroku应用程序日志更好地了解问题的想法,都是非常受欢迎的
def self.from_omniauth(auth)
where(provider: auth.provider, uid: auth.uid).first_or_create do |user|
user.email = auth.info.email
user.password = Devise.friendly_token[0,20]
user.username = auth.info.name # assuming the user model has a name
user.image = auth.info.image # assuming the user model has an image
end
end