尝试将 omniauth facebook 与 rails 集成并部署到 heroku 时无法登录
Can't log in when trying to integrate omniauth facebook with rails and deploying to heroku
我正在尝试为我部署到 heroku 的应用程序实施 omniauth facebook。
我收到以下消息:
We're sorry, but something went wrong. If you are the application
owner check the logs for more information.
点击时:
<%- if devise_mapping.omniauthable? %>
<%- resource_class.omniauth_providers.each do |provider| %>
<%= link_to "Sign in with #{OmniAuth::Utils.camelize(provider)}", omniauth_authorize_path(resource_name, provider) %><br />
<% end %>
在 /config/devise.rb 我有:
# ==> OmniAuth
# Add a new OmniAuth provider. Check the wiki for more information on setting
# up on your models and hooks.
config.omniauth :facebook, '***', '***',
scope: 'email',
info_fields: 'email',
secure_image_url: true,
image_size: 'large',
token_params: { parse: :json },
callback_url: 'https://pentalingo.herokuapp.com/users/auth/facebook/callback'
这些是日志:
dyno=web.1 connect=1ms service=33ms status=302 bytes=1197 protocol=https
2019-10-04T16:52:08.641707+00:00 app[web.1]: I, [2019-10-04T16:52:08.641611 #4] INFO -- : [fcfdf06f-ac86-403e-b3e8-0630204bd5e6] Started GET "/users/auth/facebook" for 46.24.93.212 at 2019-10-04 16:52:08 +0000
2019-10-04T16:52:08.642218+00:00 app[web.1]: I, [2019-10-04T16:52:08.642144 #4] INFO -- omniauth: (facebook) Request phase initiated.
2019-10-04T16:52:09.301754+00:00 app[web.1]: I, [2019-10-04T16:52:09.301658 #4] INFO -- : [3971d9a5-d629-4e86-a0a1-157dfdc396c6] Started GET "/users/auth/facebook" for 46.24.93.212 at 2019-10-04 16:52:09 +0000
2019-10-04T16:52:09.302090+00:00 app[web.1]: I, [2019-10-04T16:52:09.302037 #4] INFO -- omniauth: (facebook) Request phase initiated.
2019-10-04T16:52:09.302778+00:00 heroku[router]: at=info method=GET path="/users/auth/facebook" host=pentalingo.herokuapp.com request_id=3971d9a5-d629-4e86-a0a1-157dfdc396c6 fwd="46.24.93.212" dyno=web.1 connect=1ms service=4ms status=302 bytes=1197 protocol=https
2019-10-04T16:52:10.220974+00:00 app[web.1]: I, [2019-10-04T16:52:10.220880 #4] INFO -- : [41fa5c92-4e10-4e90-962e-28265bb4dfc6] Started GET "/users/auth/facebook/callback?code=AQDSIo5-TFkKDII-ncfdoy0sJe2K2zXK5Gzlr6b0hQjpzKwcaKqGXPC10QMiSCpM4bU0FvcImY9ZFG5OJO3snOEgLC209DWBqIrNBbVCeiXj6kFrnRhBcMFP4mlbSleeuH2OutMN1cPIPSWFLorrOHp6BxcbABOh88NB9A12_iGxcVIUPj-hJWDm75xgEMv80sJqaEh_EHzgMFn2urP1QE8bG9lWRxvOX20BuLWrcJuIEcHIBtEH4TSyxjeaRM_6qmlvbRObxTZJ1MY-T7edOI3BfzXnF4oqPBBSpZRPtUcXjG48ZHN_lQMo36Ua86vodsi38ibWWPdj3JBzLuo9ajZV&state=0d915222bc5a9fd101bf721f12f2ce011f305a62c046e8ae" for 46.24.93.212 at 2019-10-04 16:52:10 +0000
2019-10-04T16:52:10.221356+00:00 app[web.1]: I, [2019-10-04T16:52:10.221262 #4] INFO -- omniauth: (facebook) Callback phase initiated.
2019-10-04T16:52:10.545775+00:00 app[web.1]: I, [2019-10-04T16:52:10.545487 #4] INFO -- : [41fa5c92-4e10-4e90-962e-28265bb4dfc6] Processing by Users::OmniauthCallbacksController#facebook as HTML
2019-10-04T16:52:10.545796+00:00 app[web.1]: I, [2019-10-04T16:52:10.545595 #4] INFO -- : [41fa5c92-4e10-4e90-962e-28265bb4dfc6] Parameters: {"code"=>"AQDSIo5-TFkKDII-ncfdoy0sJe2K2zXK5Gzlr6b0hQjpzKwcaKqGXPC10QMiSCpM4bU0FvcImY9ZFG5OJO3snOEgLC209DWBqIrNBbVCeiXj6kFrnRhBcMFP4mlbSleeuH2OutMN1cPIPSWFLorrOHp6BxcbABOh88NB9A12_iGxcVIUPj-hJWDm75xgEMv80sJqaEh_EHzgMFn2urP1QE8bG9lWRxvOX20BuLWrcJuIEcHIBtEH4TSyxjeaRM_6qmlvbRObxTZJ1MY-T7edOI3BfzXnF4oqPBBSpZRPtUcXjG48ZHN_lQMo36Ua86vodsi38ibWWPdj3JBzLuo9ajZV", "state"=>"0d915222bc5a9fd101bf721f12f2ce011f305a62c046e8ae"}
2019-10-04T16:52:10.552444+00:00 app[web.1]: I, [2019-10-04T16:52:10.552371 #4] INFO -- : [41fa5c92-4e10-4e90-962e-28265bb4dfc6] Completed 500 Internal Server Error in 7ms (ActiveRecord: 0.9ms)
2019-10-04T16:52:10.553072+00:00 app[web.1]: F, [2019-10-04T16:52:10.553001 #4] FATAL -- : [41fa5c92-4e10-4e90-962e-28265bb4dfc6]
2019-10-04T16:52:10.553136+00:00 app[web.1]: F, [2019-10-04T16:52:10.553075 #4] FATAL -- : [41fa5c92-4e10-4e90-962e-28265bb4dfc6] ActiveRecord::StatementInvalid (PG::UndefinedColumn: ERROR: column users.provider does not exist
2019-10-04T16:52:10.553140+00:00 app[web.1]: LINE 1: SELECT "users".* FROM "users" WHERE "users"."provider" = ...
2019-10-04T16:52:10.553143+00:00 app[web.1]: ^
2019-10-04T16:52:10.553145+00:00 app[web.1]: : SELECT "users".* FROM "users" WHERE "users"."provider" = AND "users"."uid" = ORDER BY "users"."id" ASC LIMIT ):
2019-10-04T16:52:10.553167+00:00 app[web.1]: F, [2019-10-04T16:52:10.553124 #4] FATAL -- : [41fa5c92-4e10-4e90-962e-28265bb4dfc6]
2019-10-04T16:52:10.553254+00:00 app[web.1]: F, [2019-10-04T16:52:10.553182 #4] FATAL -- : [41fa5c92-4e10-4e90-962e-28265bb4dfc6] app/models/user.rb:54:in `from_omniauth'
2019-10-04T16:52:10.553256+00:00 app[web.1]: [41fa5c92-4e10-4e90-962e-28265bb4dfc6] app/controllers/users/omniauth_callbacks_controller.rb:3:in `facebook'
2019-10-04T16:52:10.552780+00:00 heroku[router]: at=info method=GET path="/users/auth/facebook/callback?code=AQDSIo5-TFkKDII-ncfdoy0sJe2K2zXK5Gzlr6b0hQjpzKwcaKqGXPC10QMiSCpM4bU0FvcImY9ZFG5OJO3snOEgLC209DWBqIrNBbVCeiXj6kFrnRhBcMFP4mlbSleeuH2OutMN1cPIPSWFLorrOHp6BxcbABOh88NB9A12_iGxcVIUPj-hJWDm75xgEMv80sJqaEh_EHzgMFn2urP1QE8bG9lWRxvOX20BuLWrcJuIEcHIBtEH4TSyxjeaRM_6qmlvbRObxTZJ1MY-T7edOI3BfzXnF4oqPBBSpZRPtUcXjG48ZHN_lQMo36Ua86vodsi38ibWWPdj3JBzLuo9ajZV&state=0d915222bc5a9fd101bf721f12f2ce011f305a62c046e8ae" host=pentalingo.herokuapp.com request_id=41fa5c92-4e10-4e90-962e-28265bb4dfc6 fwd="46.24.93.212" dyno=web.1 connect=1ms service=335ms status=500 bytes=1827 protocol=https
我已经将回调 link 添加到 developers.facebook
中的有效 OAuth 重定向 URI
https://pentalingo.herokuapp.com/users/auth/facebook/callback
我的方法models/users/omniauth_callbacks_controller.rb
class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController
def facebook
@user = User.from_omniauth(request.env["omniauth.auth"])
if @user.persisted?
sign_in_and_redirect @user, :event => :authentication
set_flash_message(:notice, :success, :kind => "Facebook") if is_navigational_format?
else
session["devise.facebook_data"] = request.env["omniauth.auth"]
redirect_to new_user_registration_url
end
end
def failure
redirect_to root_path
end
end
在我的用户模型中我有:
def self.new_with_session(params, session)
super.tap do |user|
if data = session["devise.facebook_data"] && session["devise.facebook_data"]["extra"]["raw_info"]
user.email = data["email"] if user.email.blank?
end
end
end
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.name = auth.info.name # assuming the user model has a name
user.image = auth.info.image # assuming the user model has an image
end
end
ActiveRecord::StatementInvalid (PG::UndefinedColumn: ERROR: column users.provider does not exist
您似乎需要向用户模型添加 provider
列。
我正在尝试为我部署到 heroku 的应用程序实施 omniauth facebook。
我收到以下消息:
We're sorry, but something went wrong. If you are the application owner check the logs for more information.
点击时:
<%- if devise_mapping.omniauthable? %>
<%- resource_class.omniauth_providers.each do |provider| %>
<%= link_to "Sign in with #{OmniAuth::Utils.camelize(provider)}", omniauth_authorize_path(resource_name, provider) %><br />
<% end %>
在 /config/devise.rb 我有:
# ==> OmniAuth
# Add a new OmniAuth provider. Check the wiki for more information on setting
# up on your models and hooks.
config.omniauth :facebook, '***', '***',
scope: 'email',
info_fields: 'email',
secure_image_url: true,
image_size: 'large',
token_params: { parse: :json },
callback_url: 'https://pentalingo.herokuapp.com/users/auth/facebook/callback'
这些是日志:
dyno=web.1 connect=1ms service=33ms status=302 bytes=1197 protocol=https
2019-10-04T16:52:08.641707+00:00 app[web.1]: I, [2019-10-04T16:52:08.641611 #4] INFO -- : [fcfdf06f-ac86-403e-b3e8-0630204bd5e6] Started GET "/users/auth/facebook" for 46.24.93.212 at 2019-10-04 16:52:08 +0000
2019-10-04T16:52:08.642218+00:00 app[web.1]: I, [2019-10-04T16:52:08.642144 #4] INFO -- omniauth: (facebook) Request phase initiated.
2019-10-04T16:52:09.301754+00:00 app[web.1]: I, [2019-10-04T16:52:09.301658 #4] INFO -- : [3971d9a5-d629-4e86-a0a1-157dfdc396c6] Started GET "/users/auth/facebook" for 46.24.93.212 at 2019-10-04 16:52:09 +0000
2019-10-04T16:52:09.302090+00:00 app[web.1]: I, [2019-10-04T16:52:09.302037 #4] INFO -- omniauth: (facebook) Request phase initiated.
2019-10-04T16:52:09.302778+00:00 heroku[router]: at=info method=GET path="/users/auth/facebook" host=pentalingo.herokuapp.com request_id=3971d9a5-d629-4e86-a0a1-157dfdc396c6 fwd="46.24.93.212" dyno=web.1 connect=1ms service=4ms status=302 bytes=1197 protocol=https
2019-10-04T16:52:10.220974+00:00 app[web.1]: I, [2019-10-04T16:52:10.220880 #4] INFO -- : [41fa5c92-4e10-4e90-962e-28265bb4dfc6] Started GET "/users/auth/facebook/callback?code=AQDSIo5-TFkKDII-ncfdoy0sJe2K2zXK5Gzlr6b0hQjpzKwcaKqGXPC10QMiSCpM4bU0FvcImY9ZFG5OJO3snOEgLC209DWBqIrNBbVCeiXj6kFrnRhBcMFP4mlbSleeuH2OutMN1cPIPSWFLorrOHp6BxcbABOh88NB9A12_iGxcVIUPj-hJWDm75xgEMv80sJqaEh_EHzgMFn2urP1QE8bG9lWRxvOX20BuLWrcJuIEcHIBtEH4TSyxjeaRM_6qmlvbRObxTZJ1MY-T7edOI3BfzXnF4oqPBBSpZRPtUcXjG48ZHN_lQMo36Ua86vodsi38ibWWPdj3JBzLuo9ajZV&state=0d915222bc5a9fd101bf721f12f2ce011f305a62c046e8ae" for 46.24.93.212 at 2019-10-04 16:52:10 +0000
2019-10-04T16:52:10.221356+00:00 app[web.1]: I, [2019-10-04T16:52:10.221262 #4] INFO -- omniauth: (facebook) Callback phase initiated.
2019-10-04T16:52:10.545775+00:00 app[web.1]: I, [2019-10-04T16:52:10.545487 #4] INFO -- : [41fa5c92-4e10-4e90-962e-28265bb4dfc6] Processing by Users::OmniauthCallbacksController#facebook as HTML
2019-10-04T16:52:10.545796+00:00 app[web.1]: I, [2019-10-04T16:52:10.545595 #4] INFO -- : [41fa5c92-4e10-4e90-962e-28265bb4dfc6] Parameters: {"code"=>"AQDSIo5-TFkKDII-ncfdoy0sJe2K2zXK5Gzlr6b0hQjpzKwcaKqGXPC10QMiSCpM4bU0FvcImY9ZFG5OJO3snOEgLC209DWBqIrNBbVCeiXj6kFrnRhBcMFP4mlbSleeuH2OutMN1cPIPSWFLorrOHp6BxcbABOh88NB9A12_iGxcVIUPj-hJWDm75xgEMv80sJqaEh_EHzgMFn2urP1QE8bG9lWRxvOX20BuLWrcJuIEcHIBtEH4TSyxjeaRM_6qmlvbRObxTZJ1MY-T7edOI3BfzXnF4oqPBBSpZRPtUcXjG48ZHN_lQMo36Ua86vodsi38ibWWPdj3JBzLuo9ajZV", "state"=>"0d915222bc5a9fd101bf721f12f2ce011f305a62c046e8ae"}
2019-10-04T16:52:10.552444+00:00 app[web.1]: I, [2019-10-04T16:52:10.552371 #4] INFO -- : [41fa5c92-4e10-4e90-962e-28265bb4dfc6] Completed 500 Internal Server Error in 7ms (ActiveRecord: 0.9ms)
2019-10-04T16:52:10.553072+00:00 app[web.1]: F, [2019-10-04T16:52:10.553001 #4] FATAL -- : [41fa5c92-4e10-4e90-962e-28265bb4dfc6]
2019-10-04T16:52:10.553136+00:00 app[web.1]: F, [2019-10-04T16:52:10.553075 #4] FATAL -- : [41fa5c92-4e10-4e90-962e-28265bb4dfc6] ActiveRecord::StatementInvalid (PG::UndefinedColumn: ERROR: column users.provider does not exist
2019-10-04T16:52:10.553140+00:00 app[web.1]: LINE 1: SELECT "users".* FROM "users" WHERE "users"."provider" = ...
2019-10-04T16:52:10.553143+00:00 app[web.1]: ^
2019-10-04T16:52:10.553145+00:00 app[web.1]: : SELECT "users".* FROM "users" WHERE "users"."provider" = AND "users"."uid" = ORDER BY "users"."id" ASC LIMIT ):
2019-10-04T16:52:10.553167+00:00 app[web.1]: F, [2019-10-04T16:52:10.553124 #4] FATAL -- : [41fa5c92-4e10-4e90-962e-28265bb4dfc6]
2019-10-04T16:52:10.553254+00:00 app[web.1]: F, [2019-10-04T16:52:10.553182 #4] FATAL -- : [41fa5c92-4e10-4e90-962e-28265bb4dfc6] app/models/user.rb:54:in `from_omniauth'
2019-10-04T16:52:10.553256+00:00 app[web.1]: [41fa5c92-4e10-4e90-962e-28265bb4dfc6] app/controllers/users/omniauth_callbacks_controller.rb:3:in `facebook'
2019-10-04T16:52:10.552780+00:00 heroku[router]: at=info method=GET path="/users/auth/facebook/callback?code=AQDSIo5-TFkKDII-ncfdoy0sJe2K2zXK5Gzlr6b0hQjpzKwcaKqGXPC10QMiSCpM4bU0FvcImY9ZFG5OJO3snOEgLC209DWBqIrNBbVCeiXj6kFrnRhBcMFP4mlbSleeuH2OutMN1cPIPSWFLorrOHp6BxcbABOh88NB9A12_iGxcVIUPj-hJWDm75xgEMv80sJqaEh_EHzgMFn2urP1QE8bG9lWRxvOX20BuLWrcJuIEcHIBtEH4TSyxjeaRM_6qmlvbRObxTZJ1MY-T7edOI3BfzXnF4oqPBBSpZRPtUcXjG48ZHN_lQMo36Ua86vodsi38ibWWPdj3JBzLuo9ajZV&state=0d915222bc5a9fd101bf721f12f2ce011f305a62c046e8ae" host=pentalingo.herokuapp.com request_id=41fa5c92-4e10-4e90-962e-28265bb4dfc6 fwd="46.24.93.212" dyno=web.1 connect=1ms service=335ms status=500 bytes=1827 protocol=https
我已经将回调 link 添加到 developers.facebook
中的有效 OAuth 重定向 URIhttps://pentalingo.herokuapp.com/users/auth/facebook/callback
我的方法models/users/omniauth_callbacks_controller.rb
class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController
def facebook
@user = User.from_omniauth(request.env["omniauth.auth"])
if @user.persisted?
sign_in_and_redirect @user, :event => :authentication
set_flash_message(:notice, :success, :kind => "Facebook") if is_navigational_format?
else
session["devise.facebook_data"] = request.env["omniauth.auth"]
redirect_to new_user_registration_url
end
end
def failure
redirect_to root_path
end
end
在我的用户模型中我有:
def self.new_with_session(params, session)
super.tap do |user|
if data = session["devise.facebook_data"] && session["devise.facebook_data"]["extra"]["raw_info"]
user.email = data["email"] if user.email.blank?
end
end
end
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.name = auth.info.name # assuming the user model has a name
user.image = auth.info.image # assuming the user model has an image
end
end
ActiveRecord::StatementInvalid (PG::UndefinedColumn: ERROR: column users.provider does not exist
您似乎需要向用户模型添加 provider
列。