Я работаю над приложением, использующим ruby 1.9.3. На производственном сайте у меня нет проблем со входом в систему, однако локально я получаю автоматический выход из системы сразу после входа в систему. Журналы моего сервера:
Started POST "/meals/sign_in" for 127.0.0.1 at 2019-01-14 10:45:46 +0000
Processing by Parent::SessionsController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"RAG5Uv8Ls/2QDxR3y/roApW6Hx49fDEmbPn6kWaeOo8=", "parent"=>{"login_id"=>"STAFF01", "password"=>"[FILTERED]", "remember_me"=>"0"}, "commit"=>"Login"}
WARNING: Can't verify CSRF token authenticity
Parent Load (22.1ms) SELECT `parents`.* FROM `parents` WHERE `parents`.`login_id` = 'STAFF01' LIMIT 1
(0.7ms) BEGIN
(1.1ms) UPDATE `parents` SET `last_sign_in_at` = '2019-01-14 10:44:57', `current_sign_in_at` = '2019-01-14 10:45:46', `sign_in_count` = 5, `updated_at` = '2019-01-14 10:45:46' WHERE `parents`.`id` = 10538
Creating scope :paid. Overwriting existing method Student.paid.
Creating scope :fsm. Overwriting existing method Student.fsm.
Creating scope :ufsm. Overwriting existing method Student.ufsm.
School Load (1.0ms) SELECT `schools`.* FROM `schools` INNER JOIN `students` ON `schools`.`id` = `students`.`school_id` WHERE `students`.`id` = 40335 LIMIT 1
SOLR Request (7.3ms) [ path=#<RSolr::Client:0x00558e163e1a08> parameters={data: <?xml version="1.0" encoding="UTF-8"?><add><doc><field name="id">Parent 10538</field><field name="type">Parent</field><field name="type">ActiveRecord::Base</field><field name="class_name">Parent</field><field name="last_name_s">Mekhaiel</field><field name="user_type_s">Parent</field><field name="school_s">Wilstead Lower School STAFF</field><field name="created_at_d">2019-01-14T10:43:08Z</field><field name="live_b">true</field><field name="first_name_text">Mark</field><field name="last_name_text">Mekhaiel</field><field name="email_text">mark@themayfairclub.co.uk</field><field name="school_text">Wilstead Lower School STAFF</field></doc></add>, headers: {"Content-Type"=>"text/xml"}, method: post, params: {:wt=>:ruby}, query: wt=ruby, path: update, uri: http://localhost:8981/solr/update?wt=ruby, open_timeout: , read_timeout: } ]
(10.2ms) COMMIT
Redirected to http://meals.meals.localhost:3000/credit_payments/new
SOLR Request (76.6ms) [ path=#<RSolr::Client:0x00558e163e1a08> parameters={data: <?xml version="1.0" encoding="UTF-8"?><commit/>, headers: {"Content-Type"=>"text/xml"}, method: post, params: {:wt=>:ruby}, query: wt=ruby, path: update, uri: http://localhost:8981/solr/update?wt=ruby, open_timeout: , read_timeout: } ]
Completed 302 Found in 11227.0ms (ActiveRecord: 0.0ms)
Started GET "/credit_payments/new" for 127.0.0.1 at 2019-01-14 10:45:57 +0000
Processing by Parent::CreditPaymentsController#new as HTML
Completed 401 Unauthorized in 0.4ms
В соответствии с этим родитель входит в систему, обновляет свой последний sign_in_time, а затем перенаправляется на путь входа после.
Как только они попадают в этот контроллер, запускается метод проверки подлинности родителя, проверяя, вошел ли родитель и не возвращает ли 401 неавторизованный.
Контроллер сессий моего родителя:
class Parent::SessionsController < Devise::SessionsController
def new
flash.alert = "Invalid student ID or password" if flash.alert == "Invalid email or password."
if admin_signed_in? || parent_signed_in? || school_user_signed_in?
sign_out :admin if admin_signed_in?
sign_out :parent if parent_signed_in?
sign_out :school_user if school_user_signed_in?
redirect_to new_parent_session_path # Force a full reload
else
super
end
end
def create
self.resource = warden.authenticate!(auth_options)
# A check to see if the user has been archived - can't log in if so
if resource.live?
set_flash_message(:notice, :signed_in) if is_navigational_format?
sign_in(resource_name, resource)
binding.pry
respond_with resource, :location => after_sign_in_path_for(resource)
else
sign_out resource
redirect_to root_url(:subdomain => false),
:alert => "Your account is inactive, please <a href='/contact-us'>contact Caterlink</a> to re-activate your account"
end
end
def after_sign_in_path_for(resource)
new_parent_credit_payment_url(:subdomain => Parent.subdomain, :tld_length => tld_length)
end
end
Я могу подтвердить, что в точке binding.pry в моем контроллере сессий current_parent перезагружает родительский объект, в который я только что вошел, как только он попадает в следующий контроллер и authenticate_parent! метод запускается, система думает, что в ней нет родительского входа. Определение authenticate_parent вручную with binding.pry подтверждает, что ни один из родителей не вошел в систему.
Как я могу узнать, что происходит между входом в систему родителей и их первым контроллером?
Заранее спасибо