Tag: 设计

如何在Rails引擎中获取Devise的current_user方法

我有一个使用Devise gem的Rails应用程序,我正在创建一个Rails引擎来安装在这个应用程序中。 mount Comments::Engine => ‘/talk’, :as => ‘comments’ 在Engine中,我想从主应用程序中获取current_user实例。 在{main_app} /initializers/comments.rb中 Comments.user_class = “User” Comments.current_user = “current_user” #current_user is Devise method(works fine in app) 在{engine} /lib/comments.rb中 require “comments/engine” module Comments mattr_accessor :user_class, :current_user def self.user_class @@user_class.constantize end def self.current_user send(@@current_user) end end 当我调用Comments.current_user ,我收到错误“错误的常量名称current_user”。 我究竟做错了什么?

设计 – 无法在rails视图中显示登录或注销

我正在使用设计来进行基本身份validation。 当我去localhost:3000/users/sign_in我将能够登录,或者当我登录时,如果我去那里,我将收到相应的消息“你已经登录了”。 但是, user_signed_in? 即使在成功登录后,也总是评估为假 Welcome ! :delete %> :delete %> “flash_#{name}” %> 这是config/application.rb class ApplicationController < ActionController::Base protect_from_forgery with: :exception before_filter :authenticate_user! private def current_user @current_user ||= User.find(session[:user_id]) if session[:user_id] end helper_method :current_user end 我怎样才能获得user_signed_in? 是真实的? 无论我是否成功登录, current_user也仍然是假的

设计,允许用户更改密码

我有一个应用程序,它有一个名为users_controller的自定义注册控制器,用于设计,因为只有Admin才能创建用户。 我想允许用户通过输入旧密码并输入新密码来更改密码,我发现: https : //github.com/plataformatec/devise/wiki/How-To : -Allow- users-to- edit-他们的密码,但它没有提供足够的细节。 我需要在路线上放些什么? 在观点中我需要放在哪里?

Capybara,Devise,CanCan和RSpec集成测试:有效签到302重定向到example.com

更新:请参阅文章的结尾,了解规范现在如何工作,我的规格/请求中的规格而不是规格/控制器。 仍然想知道如何获得一个有效的登录用户与我的控制器进行集成测试。 我第一次使用Devise和CanCan,并且很难进行最基本的集成测试,我正在validation登录的用户是……好……登录。我已经阅读了无数post和处理Devise和RSpec集成测试的答案(即通过https://github.com/plataformatec/devise/wiki/How-To%3a-Test-with-Capybara,http:// schneems直接访问会话来加速它们.com / post / 15948562424 / speed-up-capybara-tests-with-devise ,以及Capybara,RSpec和Devise:通过绕过慢速登录和直接设置会话,可以更快地进行集成测试吗?但我一直无法做到得到一个标准的工作按预期工作,我很困惑: 开发环境工作正常(可以登录并重定向到正确的页面,导航登录链接更改为注销等)。 test.log表示没有问题,直到302重定向到http://www.example.com而不是我的root_path。 对于具有不同解决方案的类似问题的大量用户,我显然不是唯一一个遇到此问题的人,因为会话的各个方面等在不同场景中不可用。 剥离测试: subject { page } describe ‘should be able to log in’ do before do visit ‘/users/sign_in’ user = FactoryGirl.create(:admin) #user.add_role :admin fill_in ‘Username’, with: user.username fill_in ‘Password’, with: user.password click_on ‘Sign in’ end it { should have_link ‘Logout’ } end […]

设计 – 为多个用户单一登录表单

我有两个Devise模型,User和Business; 我希望两者都能够使用单一登录forms登录。 我正在使用骨干js,我有一个自定义的视图,所以视图不是一个问题。 ajax请求用于登录,它按预期适用于用户,但不适用于企业。 我搜索过谷歌,并提到了一些使用STI来解决这个问题的解决方案,但是项目已经完成了很多工作,我现在无法做出这样的改变。 我正在考虑重写Devise会话控制器和: 检查给定的电子邮件地址是否为用户,然后使用Warden对用户进行身份validation。 如果未找到具有该电子邮件的用户,则使用Warden对Business模型进行身份validation。 我无法弄清楚如何更改代码来实现上述目标,我不知道warden如何工作以及我需要调整哪些params来实现上述function,需要调用哪些函数。 任何人都可以指出我正确的方向或提供一个例子,说明我应该如何向前推进。 谢谢。

登录后重定向到特定URL

在Devise 1.0中,Rails 2.3的库是否有办法在登录后重定向到特定的URL而不是root_url? 编辑:忘了提它是Devise 1.0

如何将Devise的Rails应用程序转换为SSO / CAS服务器?

我从上一个问题中意识到我一直在问错误的问题…我想将我的应用程序转换为CAS服务器,以便应用程序的管理员可以使用相同的身份validation机制登录我们为其开发的其他应用程序组织。 你以前做过这个吗? 是否有插件增加了Devise能够充当CAS服务器的能力? 为了将应用程序变成CAS服务器,我需要更改/添加什么?

设计:密码重置电子邮件中的edit_password_url将用户发送到url / api / v1 /

我有我的rails应用程序和Devise设置使用JSON API来进行用户注册和登录。 副作用是密码重置电子邮件中的edit_password_url意外地将用户发送到: http://localhost:3000/api/v1/password/edit?reset_password_token=ZzyPCgmspN2964ENUkSS 什么时候它不应该有api/v1/ ,并且应该发送给: http://localhost:3000/password/edit?reset_password_token=ZzyPCgmspN2964ENUkSS 我一直在寻找,但无法弄清楚在哪里解决这个问题。 我创建了以下内容: Api::V1::SessionsController < Devise::SessionsController 和 Api::V1::RegistrationsController < RegistrationsController 我有一个常规的RegistrationsControllerinheritance自devise,但不是一个常规的SessionsController,所以我只是直接从设计inheritance。 谢谢您的帮助! 编辑: routes.rb namespace :api, defaults: {format: ‘json’} do namespace :v1 do resources :users devise_for :users, :path => ”, path_names: {sign_in: “login”, sign_out: “logout”}, controllers: { omniauth_callbacks: “authentications”, registrations: “registrations”} end end devise_for :users, :path => ”, path_names: […]

登录时在设计中设置会话变量

我想在用户根据User表中的某个字段登录时设置会话变量。 如果我不需要,我不想创建自定义Devise控制器。 有办法吗? 或者我必须去自定义控制器路线?

如何使用Devise停止软删除用户的登录

我目前在Rails项目中使用Devise进行用户注册/身份validation。 当用户想要取消其帐户时,将以如下方式软删除用户对象。 如何用Devise“软删除”用户 我的implmenetation这种方式有一点不同。 用户模型具有属性’deleted_flag’。 并且,soft_delete方法执行“update_attribtue(:deleted_flag,true)” 但是,我必须实施sign_in行动。 我的主要内容如下。 class SessionsController resource_name, :recall => “#{controller_path}#new”) if resource.deleted_flag p “deleted account : ” + resource.deleted_flag.to_s sign_out(resource) render :controller => :users, :action => :index else if is_navigational_format? if resource.sign_in_count == 1 set_flash_message(:notice, :signed_in_first_time) else set_flash_message(:notice, :signed_in) end end sign_in(resource_name, resource) respond_with resource, :location => redirect_location(resource_name, resource) end end […]