![](/img/trans.png)
[英]Rails, Devise: If user signed in create with user id, else without
[英]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.