ProgramingTip

로그인을 루트 페이지로 설정

bestdevel 2020. 10. 15. 08:08
반응형

로그인을 루트 페이지로 설정


내 경로에 다음 코드를 사용하고 있습니다.

devise_for :user, 
  :as => '', 
  :path_names => { 
    :sign_in => "", 
    :sign_out => "logout", 
    :sign_up => "register" 
  }

그러나 로그 아웃하고 /logout이동하면 다음 오류가 발생합니다.

{: action => "new", : controller => "devise / sessions"}와 일치하는 경로가 없습니다.

작업 할 루트 경로를 어떻게 설정 :sign_in합니까?


오류에 대한 사람들의 Could not find devise mapping for path "/"조치에는 해결 방법이 있습니다.

로그에 다음과 같은 단서가 있음을 알 수 있습니다.

[Devise] Could not find devise mapping for path "/".
This may happen for two reasons:

1) You forgot to wrap your route inside the scope block. For example:

  devise_scope :user do
    match "/some/route" => "some_devise_controller"
  end

2) You are testing a Devise controller bypassing the router.
   If so, you can explicitly tell Devise which mapping to use:

   @request.env["devise.mapping"] = Devise.mappings[:user]

그래서 접근 방식을 다시 시도했지만 대신 범위 블록 안에 @miccet suggets로 래핑했습니다.

devise_scope :user do
  root to: "devise/sessions#new"
end

이것은 나를 위해 잘 작동했습니다.


devise_for :users

devise_scope :user do
  authenticated :user do
    root 'home#index', as: :authenticated_root
  end

  unauthenticated do
    root 'devise/sessions#new', as: :unauthenticated_root
  end
end

이와 비슷한 Rails Rails 4.1.0.rc1에서 테스트되었습니다.


root :to => "devise/sessions#new"

기본 홈 루트를 설정해야합니다. 어제 밤새도록 (질문을 게시하기 전에) 시도한 것처럼 보이는지만 지금은 작동하고 있습니다. 로그 아웃 한 경우 Devise는 내가 정의하지 않은 루트 경로로 리디렉션을 시도합니다.


(이 제안 제안 된 편집으로 게시 그 자체의 대답 있어야합니다. 말이 의미 모르겠습니다. 익명의 편집자에게 :이 답변을 자신의 다시 게시하고 댓글을 다리주세요.이 사본을 삭제하겠습니다.)

root :to => redirect("/users/login")

@VvDPzZ 답변과 함께 작동합니다. 하지만 약간 수정해야 했어요

  devise_scope :business_owner do
    authenticated  do
      root to: 'pages#dashboard'
    end

    unauthenticated do
      root to: 'devise/sessions#new', as: 'unauthenticated_root'
    end
  end  

to:루트 경로 선언 에 광고 해야했습니다 . 나는 또한 링크에서 as: :authenticated_root참조 root_path하는 내 응용 프로그램에 이미 일부 위치가 있기 때문에 제거했습니다 . as: :authenticated_root부분을 생략함으로써 기존 링크를 변경할 필요가 없었습니다.


사용자 역할이 다른 것 같습니다. 사용자 리소스에 다음과 같은 범위를 추가해야하는 경우 :

  devise_scope :user do
    get "/logout" => "devise/sessions#destroy"
  end

여기에서 devise 경로 재정의에 대한 자세한 내용을 읽을 수 있습니다. https://github.com/plataformatec/devise/wiki/How-To:-Change-the-default-sign_in-and-sign_out-routes


이러한 솔루션 중 일부는 너무 복잡합니다. Rails를 사용하십시오.

'get' 'users/root', to: 'users#root'config / routes.rb에 추가하십시오 .

UsersController에서 다음과 같이하십시오.

def root
  if user_signed_in?
    redirect_to root_for_signed_in_user_path (or whatever)
  else
    redirect_to new_user_session_path
  end
end

rails 3.2devise 3.2.3을 사용 하여 로그인 페이지로 내 홈페이지 " home # index "(controller # action)를 설정하여 다음과 같이 변경합니다.

# 1 홈페이지에 로그인 양식 추가 :

<%= simple_form_for(resource, as: resource_name, url: session_path(resource_name)) do |f| %>
    <%= f.input :email %>
    <%= f.input :password %>
    <%= f.button :submit %>
<% end %>

# 2 app / heldpers / application_helper.rb에 resource_name, resource 및 devise_mapping 메소드 추가 :

def resource_name
  :user
end

def resource
  @resource ||= User.new
end

def devise_mapping
  @devise_mapping ||= Devise.mappings[:user]
end

# 3 커스텀 세션 컨트롤러 app / controllers / users / sessions_controller.rb 생성 :

class Users::SessionsController < Devise::SessionsController

   protected

   # This method tell sessions#create method to redirect to home#index when login fails.
   def auth_options
      { scope: resource_name, recall: 'home#index' }
   end

end

# 4 세션 경로를 건너 뛰고 config / routes.rb 에서 사용자 지정 세션 컨트롤러를 설정합니다 .

devise_for :users, path: 'auth', skip: [:sessions],
           controllers: {
               sessions: 'users/sessions'
           }

as :user do
  get 'auth/sign_in' => 'home#index', as: :new_user_session
  post 'auth/sign_in' => 'users/sessions#create', as: :user_session
  delete 'auth/sign_out' => 'users/sessions#destroy', as: :destroy_user_session
end

참고 URL : https://stackoverflow.com/questions/4954876/setting-devise-login-to-be-root-page

반응형