2017-11-09 1 views
2

저는 레일과 함께 devise를 사용하고 있습니다. 잘못된 비밀번호로 로그인하려고하면 다음 오류가 표시됩니다.다른 접두사 : "/"및 "http :/localhost : 3000"과 함께

different prefix: "/" and "http:/localhost:3000"

ruby ​​2.4.1에서 rbenv를 사용하고 있습니다. Ruby 2.3.3에서도 같은 문제가있었습니다.

/home/badr/.rbenv/versions/2.4.1/lib/ruby/2.4.0/pathname.rb:520:in `relative_path_from' 
devise (4.3.0) lib/devise/failure_app.rb:58:in `recall' 
devise (4.3.0) lib/devise/failure_app.rb:39:in `respond' 
actionpack (5.1.4) lib/abstract_controller/base.rb:186:in `process_action' 
actionpack (5.1.4) lib/abstract_controller/base.rb:124:in `process' 
actionpack (5.1.4) lib/action_controller/metal.rb:189:in `dispatch' 
actionpack (5.1.4) lib/action_controller/metal.rb:242:in `block in action' 
devise (4.3.0) lib/devise/failure_app.rb:21:in `call' 
devise (4.3.0) lib/devise/delegator.rb:5:in `call' 
warden (1.2.7) lib/warden/manager.rb:143:in `call_failure_app' 
warden (1.2.7) lib/warden/manager.rb:129:in `process_unauthenticated' 
warden (1.2.7) lib/warden/manager.rb:44:in `call' 
rack (2.0.3) lib/rack/etag.rb:25:in `call' 
rack (2.0.3) lib/rack/conditional_get.rb:38:in `call' 
rack (2.0.3) lib/rack/head.rb:12:in `call' 
rack (2.0.3) lib/rack/session/abstract/id.rb:232:in `context' 
rack (2.0.3) lib/rack/session/abstract/id.rb:226:in `call' 
actionpack (5.1.4) lib/action_dispatch/middleware/cookies.rb:613:in `call' 
activerecord (5.1.4) lib/active_record/migration.rb:556:in `call' 
actionpack (5.1.4) lib/action_dispatch/middleware/callbacks.rb:26:in `block in call' 
activesupport (5.1.4) lib/active_support/callbacks.rb:97:in `run_callbacks' 
actionpack (5.1.4) lib/action_dispatch/middleware/callbacks.rb:24:in `call' 
actionpack (5.1.4) lib/action_dispatch/middleware/executor.rb:12:in `call' 
actionpack (5.1.4) lib/action_dispatch/middleware/debug_exceptions.rb:59:in `call' 
web-console (3.5.1) lib/web_console/middleware.rb:135:in `call_app' 
web-console (3.5.1) lib/web_console/middleware.rb:28:in `block in call' 
web-console (3.5.1) lib/web_console/middleware.rb:18:in `catch' 
web-console (3.5.1) lib/web_console/middleware.rb:18:in `call' 
actionpack (5.1.4) lib/action_dispatch/middleware/show_exceptions.rb:31:in `call' 
railties (5.1.4) lib/rails/rack/logger.rb:36:in `call_app' 
railties (5.1.4) lib/rails/rack/logger.rb:24:in `block in call' 
activesupport (5.1.4) lib/active_support/tagged_logging.rb:69:in `block in tagged' 
activesupport (5.1.4) lib/active_support/tagged_logging.rb:26:in `tagged' 
activesupport (5.1.4) lib/active_support/tagged_logging.rb:69:in `tagged' 
railties (5.1.4) lib/rails/rack/logger.rb:24:in `call' 
sprockets-rails (3.2.1) lib/sprockets/rails/quiet_assets.rb:13:in `call' 
actionpack (5.1.4) lib/action_dispatch/middleware/remote_ip.rb:79:in `call' 
actionpack (5.1.4) lib/action_dispatch/middleware/request_id.rb:25:in `call' 
rack (2.0.3) lib/rack/method_override.rb:22:in `call' 
rack (2.0.3) lib/rack/runtime.rb:22:in `call' 
activesupport (5.1.4) lib/active_support/cache/strategy/local_cache_middleware.rb:27:in `call' 
actionpack (5.1.4) lib/action_dispatch/middleware/executor.rb:12:in `call' 
actionpack (5.1.4) lib/action_dispatch/middleware/static.rb:125:in `call' 
rack (2.0.3) lib/rack/sendfile.rb:111:in `call' 
railties (5.1.4) lib/rails/engine.rb:522:in `call' 
puma (3.10.0) lib/puma/configuration.rb:225:in `call' 
puma (3.10.0) lib/puma/server.rb:605:in `handle_request' 
puma (3.10.0) lib/puma/server.rb:437:in `process_client' 
puma (3.10.0) lib/puma/server.rb:301:in `block in run' 
puma (3.10.0) lib/puma/thread_pool.rb:120:in `block in spawn_thread' 

어떤 생각이에서 온 수 있습니다

여기에 전체 스택 트레이스입니까?

업데이트 : 프로젝트가 다른 컴퓨터에서 제대로 작동하는지 확인하기 위해 cloud9에서 작업 영역을 만들었습니다. 그래서 내 루비 설치에 문제가있는 것처럼 보입니다. 문제가 발생하기 전에 나는 내 리눅스 머신에서 프로젝트 폴더를 파괴하고 bitbucket에서 다시 복제했다.

+1

https://github.com/plataformatec/devise/issues/4096 – Kris

+0

ruby ​​2.2.6을 설치하려고합니다. 동일한 문제가 발생하면 ... – bTazi

+1

오류 메시지에'http : /', shouldn 'http : //'일까요? – Stefan

답변

0

이것은 행동의 개발 워크 플로입니다.

양식을 작성한 사람이 session/new.html.erb입니다. Devise는 form_for을 사용하여 양식을 개체에 바인딩하고 routes.rb 파일의 RESTful 경로를 사용합니다. self.resource = resource_class.new(sign_in_params)

<form accept-charset="UTF-8" action="/users" method="post" class="nifty_form"> 

HTML 양식이 트리거

<%= form_for(resource, as: resource_name, url: session_path(resource_name)) do |f| %> 

form_for 태그는 다음 HTML 양식을 생성, resource는 코드를 사용하여 SessionsController#new action하여 User 또는 Admin 모델을 기반으로 객체로 대체됩니다 a POSTsubmit 버튼을 클릭하면 /users로 요청합니다.

POST 요청

는 설정에 따라 당신이 어떻게 응답 결정됩니다 routes.rb에 구성하여 서버 라우터에서 수신됩니다. 당신의 routes.rb 파일이 고안 지침으로 구성되어있는 경우

, 이것은 request가로부터 수신 그래서 다음과 같은 경로

user_session POST /users/sign_in     {controller:"devise/sessions", action:"create"} 

를 생성하여 routes.rb 파일

devise_for :users 

될 것입니다 서버 일 경우 sessions_controller.rb#create action에서 처리해야합니다. 이 컨트롤러는 Github 또는 RVM 또는 RBENV 폴더에 설치된 GEMS에 표시 할 수 있습니다.당신이 잘못된 암호와 이메일을 줄 때, validate(resource){ hashed = true; resource.valid_password?(password) }는 false를 반환합니다,이 method

def authenticate! 
resource = password.present? && mapping.to.find_for_database_authentication(authentication_hash) 
hashed = false 

if validate(resource){ hashed = true; resource.valid_password?(password) } 
    remember_me(resource) 
    resource.after_database_authentication 
    success!(resource) 
end 

mapping.to.new.password = password if !hashed && Devise.paranoid 
fail(:not_found_in_database) unless resource 
end 

를 호출 잘못된 인증을 사용하기로 결정하면 당신은 또한 binding.pry

# POST /resource/sign_in 
    def create 
    self.resource = warden.authenticate!(auth_options) 
    set_flash_message!(:notice, :signed_in) 
    sign_in(resource_name, resource) 
    yield resource if block_given? 
    respond_with resource, location: after_sign_in_path_for(resource) 
    end 

을 설정하여 디버깅 할 수 있습니다 이 코드를 실행하십시오

mapping.to.new.password = password if !hashed && Devise.paranoid 
fail(:not_found_in_database) unless resource 

어떤 이유로 인해 잘못된 URL로 리디렉션됩니다.

이 코드는 귀하의 페이지에 오류 (session/new.html.erb)가 있다는 것을 나타냅니다. 그래서 Devise 표준 컨트롤러에 GET request이 없지만 오류 메시지가있는보기를 다시 렌더링한다고 생각합니다.

제 궁금한 점은, Devise 컨트롤러를 덮어 썼습니까? routes.rb 파일과 rake routes의 결과를 Google에 보내 주시겠습니까?

관련 문제