【问题标题】:Custom sessions controller for Devise in Rails 4在 Rails 4 中设计的自定义会话控制器
【发布时间】:2013-11-03 01:48:06
【问题描述】:

尽可能多地关注 Wiki,我可以摆脱它,但完成起来有点困难。我以前用过 Devise,但我想了解 Devise 的新功能,所以我来了。

我遇到的问题是用户没有登录并被重定向。这是我到目前为止所拥有的。任何投入将不胜感激。谢谢!

设计移至views/admin/sessions/的视图

-> 路线

VnGrill::Application.routes.draw do
  devise_for :admins, controllers: { sessions: 'admin/sessions' }, skip: [:sessions]

  devise_scope :admin do
    get    'signin',  to: 'admin/sessions#new',     as: :new_admin_session
    post   'signin',  to: 'admin/sessions#create',  as: :admin_session
    delete 'signout', to: 'admin/sessions#destroy', as: :destroy_admin_session,via:     
    Devise.mappings[:admin].sign_out_via
  end

  scope module: :admin do
    resources :dashboard
  end

  root to: 'static_pages#index'  
end

-> Admin::DashboardController

class Admin::DashboardController < ApplicationController
  layout 'dashboard'
  before_filter :authenticate_admin!

  def index
  end
end

-> Admin::SessionsController

class Admin::SessionsController < Devise::SessionsController
  layout 'dashboard'

  def new
    super 
    # My thought here was just to call super 
    # and let Devise handle as normal w/o defining anything custom
  end

  def create 
    super
  end

  def destroy  
    super
  end

  def resource_name
    :admin
  end

  def resource
    @resource ||= Admin.new
  end

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

-> 会话/新

.form-signin
  %h2.form-signin-heading VN Grill Dashboard
  = form_for(resource, as: resource_name, url: session_path(resource_name)) do |f|
    = devise_error_messages!
    = f.email_field :email, class: 'form-control', autofocus: true, placeholder: 'Email'
    %br/
    = f.password_field :password, class: 'form-control', placeholder: 'Password'
    = f.submit 'Login', class: 'btn btn-lg btn-danger btn-block pull-left'

【问题讨论】:

  • 它实际上并没有让用户登录。如果我注册,那么它可以工作,但如果我尝试以我刚刚创建的用户身份登录,它只会重新呈现登录表单并url 填充了请求参数,就好像它是一个获取请求一样。
  • 请出示登录表单模板
  • 比利,我将它添加到我上面的原始帖子中。谢谢!
  • 一切正常。我想知道 `session_path(resource_name) 是否可以生成正确的路径,您可以检查原始 html。如果不确定,最好写一些测试。

标签: ruby-on-rails devise ruby-on-rails-4


【解决方案1】:

你为什么不这样配置你的路由:

devise_scope :admin do
  controllers: { sessions: 'admin/sessions' }
end

我建议您使用 devise rake 任务创建自定义控制器,然后进行进一步的更改。

rails generate devise:controllers [scope]

【讨论】:

    猜你喜欢
    • 2018-06-26
    • 1970-01-01
    • 1970-01-01
    • 2011-12-12
    • 1970-01-01
    • 2015-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多