我正在使用rails的非營利組織的網站上工作。Rails無限循環當重定向到finish_singup
當用戶首次通過社交網絡(Facebook,Twitter)登錄時,我們遇到了問題。
在通過社交網絡在頁面上註冊時,頁面將用戶重定向到最終表單(finish_signup),用戶在其中填寫附加數據(郵件,性別,出生日期),但當用戶按下點擊繼續頁面重新將用戶重定向到結束表單(finish_singup)並因此停留在無限循環中。
這是控制檯告訴我,當用戶按下繼續
http://i.imgur.com/jWnjVHE.png
當我檢查的數據庫上我看到,問的最終形式(finish_singup)的額外信息,它不出現,只有當信息的「用戶按下點擊唱了嘰嘰喳喳
只有當我填寫所需要的數據(郵件,性別,出生日期)手動從我可以克服t時的數據庫他無限循環並將用戶重定向到主頁面。
這是我對home_controller.rb
class HomeController < ApplicationController
before_filter :user_has_signed_in
def index
logger.info request.headers['CustomHeader']
end
private
def user_has_signed_in
if user_signed_in?
redirect_to main_path
end
end
end
而這就是我對user.rb模型
class User < ActiveRecord::Base
has_many :identities
has_many :session_ids
TEMP_EMAIL_PREFIX = '[email protected]'
TEMP_EMAIL_REGEX = /\[email protected]/
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :confirmable, :recoverable, :registerable, :trackable, :timeoutable, :validatable, :omniauthable, omniauth_providers: [:facebook,:twitter]
validates_format_of :email, without: TEMP_EMAIL_REGEX, on: :update
has_many :reports, dependent: :destroy
has_many :affectation_votes
has_many :comments
has_many :likes
has_many :activity_records
validates :name, presence: true
validates :email, uniqueness: true
validates :username, uniqueness: true
#validates :gender, presence: true
#validates :birthdate, presence: true
has_attached_file :avatar
# validates_attachment :avatar, content_type: { content_type: ["image/jpeg", "image/gif", "image/png", "image/bmp"] }, size: { less_than: 1.megabytes }
do_not_validate_attachment_file_type :avatar
def avatar_url
omniauth_image || (avatar.url =~ /missing/ ? nil : avatar.url)
end
def report_count
reports.count
end
def comment_count
comments.count
end
def level
number_of_reports = reports.count
if number_of_reports >= 60
return 9
elsif number_of_reports >= 45
return 8
elsif number_of_reports >= 35
return 7
elsif number_of_reports >= 25
return 6
elsif number_of_reports >= 20
return 5
elsif number_of_reports >= 15
return 4
elsif number_of_reports >= 10
return 3
elsif number_of_reports >= 5
return 2
else
return 1
end
end
def since
created_at.strftime('%d/%m/%Y')
end
def get_uid_for_provider(provider)
if identities.count > 0
identities.find_by_provider(provider).uid
else
nil
end
end
def self.find_by_uid_for_provider(uid, provider)
identity = Identity.where(provider: provider, uid: uid)
if identity
identity.user
else
nil
end
end
def self.find_for_oauth(auth, signed_in_resource = nil)
# Get the identity and user if they exist
identity = Identity.find_for_oauth(auth)
# If a signed_in_resource is provided, it always overrides the existing user
# to prevent the identity beign locked with accidentally created accounts.
# Note that this may leave zombie accounts (with no associated identity) which
# can be cleaned up at a later date.
user = signed_in_resource ? signed_in_resource : identity.user
# Create the user if needed
if user.nil?
# Get the existing user by email if the provider gives us a verified email.
# If no verified email was provided we assign a temporary email and ask the
# user to verify it on the next step via UsersController.finish_signup
email_is_verfied = auth.info.email && (auth.info.verified || auth.info.verified_email)
email = auth.info.email if email_is_verfied
user = User.where(email: email).first if email
# Create the user if it is a new registration
if user.nil?
# logger.info auth
user = User.new(
name: auth.extra.raw_info.name,
email: email ? email : "#{TEMP_EMAIL_PREFIX}-#{auth.uid}-#{auth.provider}.com",
password: Devise.friendly_token[0,20],
omniauth_image: auth.info.image
)
user.skip_confirmation!
user.save!
end
end
# Associate the identity with the user if needed
if identity.user != user
identity.user = user
identity.save!
end
user
end
def email_verified?
self.email && self.email !~ TEMP_EMAIL_REGEX
end
這是,如果你希望服務器的回購頁看看
https://github.com/denialtorres/YoCDDN/
我會很感激,如果我可以幫助這個。問候:)
當您提交'finish_signup'表單時,您是否在控制檯中查看是否存在'unpermitted parameters:username'?簡而言之,您提交表單時存儲在數據庫中的用戶名? – Deep
嗨!謝謝你的幫助。我沒有得到任何'不允許的參數:username'我只得到'過濾器鏈暫停爲:check_complete_user_data呈現或重定向'然後頁面再次在'finish_signup'上重新加載。即使我把它們放在窗體上,用戶名和郵件也不會存儲在數據庫中。這是它的外觀[link] http://i.imgur.com/AonrjZh.png [link]在控制檯上,我只能看到GET方法,但從來沒有PATCH或PUT,當我按**繼續** –
請參閱答案和嘗試,應該幫助 – Deep