簡體   English   中英

Rails 設計路線:如果用戶已登錄,請指向索引。 否則,指向新用戶會話

[英]Rails Devise Routes: If user signed in, point to index. Else, point to new user session

非常簡單的問題,但我似乎無法通過優秀的老式 Google 找到答案。

錯誤:

undefined method `user_signed_in?' for #<ActionDispatch::Routing::Mapper:0x007fc6369320e8> (NoMethodError)

服務器甚至不會啟動。

我的代碼:

Rails.application.routes.draw do

devise_for :users, :path_prefix => 'u'
resources :users

  devise_scope :user do
    get "login", to: "devise/sessions#new", as: :login
    get 'logout', to: 'devise/sessions#destroy', as: :logout
    get 'user/edit', to: 'devise/registrations#edit', as: :change_password
  end

  resources :apps do
    resources :elements, controller: 'apps/elements'
  end

  resources :elements do
      resources :features, except: [:index], controller: 'apps/elements/features'
  end

if user_signed_in?
  root to: 'apps#index'
else
devise_scope :user do
  root to: 'devise/sessions#new'
end
end

end

完成這項工作的最佳方法是什么? 作為一個新的 RoR 用戶,我很猶豫要不要嘗試解決它並使網站易受攻擊。 提前致謝。

在 Rails 中,訪問控制是在控制器層上完成的——而不是在路由層上。

路由只是為不同的參數集和請求 url 定義匹配器。 它們在 rails 甚至開始處理請求之前就被處理,它們對會話一無所知。 Rails 甚至可以使用 YML 來定義路由,只是 Ruby 更擅長 DSL。

如果您想要求用戶登錄,您可以使用:

class SomeController < ApplicationController
  before_action :authenticate_user! # a Devise helper method
end

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM