Tag: 设计

如何在Rails中记录user_name?

我在Rails 3中使用Devise。我想在production.log中看到current_user的名称。 我想像这样配置rails: config.log_tags = [:user_name]

Active Admin身份validation与用户身份validation冲突

Active Admin是一个用于在应用程序中使用管理仪表板的gem。 它使用Devise登录用户,并为管理员创建单独的admin_user模型。 我的应用程序已经使用了devise并将其用户作为user模型。 自从我开始使用活动的admin gem之后,在我的路由文件中,即使我的用户已登录,以下行也会一直解析为home #index而不是用户#spaceboard。以前用户工作时用户工作正常#dashboard作为根url。 root :to => ‘users#dashboard’, :constraints => lambda {|r| r.env[“warden”].authenticate? } root :to => ‘home#index’ 发生的事情是.authenticate? 正在检查是否已登录的admin_user (属于Active Admin)但不是我的user模型,这是我需要检查的内容,因此当我登录到活动管理界面时,我的站点根目录成为用户#dashboard而不是检查user是否已登录。 我该如何制作.authenticate? 检查user是否登录而不是admin_user ? 任何帮助或线索将非常感谢

在Rails 3中处理多租户的最佳方法

我正在构建多租户应用程序。 所有数据隔离都由每个表中的TenantID列完成。 所有租户模型自动处理多租户的最佳方法是什么。 例: Contacts.new({…..}) should automatically add :tenant => curret_user.tenant Contacts.where({….}) should also add :tenant => curret_user.tenant 目前我在CanCan gem中看到类似这样的内容,它可以获取特定用户参数的记录。 但它没有为插入和更新操作提供任何东西。 或者可能是我不明白该怎么做。 此致,Alexey Zakharov。

在rspec特征测试中使用Devise

我写了以下rspec特性测试规范: require “rails_helper” RSpec.describe “Team management”, type: :feature do user_sign_in describe “User creates a new team” do … expect(page).to have_link(“#{team_name}”) end end user_sign_in方法在我的rails_helper.rb定义: ENV[‘RAILS_ENV’] ||= ‘test’ require ‘spec_helper’ require File.expand_path(‘../../config/environment’, __FILE__) require ‘rspec/rails’ require ‘capybara/rails’ … module UserSignInHelpers def user_sign_in before(:each) do @request.env[‘devise.mapping’] = Devise.mappings[:user] @current_user = FactoryGirl.create(:user) @current_user.confirm sign_in :user, @current_user end end end […]

为登录用户设计忘记密码

我想知道是否有一种方式调用’忘记密码’程序而不强迫我的用户注销 我遇到的情况是:1。用户使用facebook登录,为他们生成假密码2.然后用户想要更改他们的电子邮件/名称/密码,或者只使用非Facebook登录 由于设计需要密码来更改这些字段,因此用户无法修改它们 我曾经考虑过不强制设置密码,但安全性没有意义,所以我只是将字段显示为文本并通知用户按照“忘记密码”程序设置密码然后他们可以改变领域 问题是我不能简单地从用户配置文件链接到这个,因为设计会告诉用户他们在登录时无法执行此操作。 那么是否有一种覆盖忘记密码或/ users / password / edit方法的方式,以便登录用户也可以执行此操作?

Devise控制器中“产生资源”的作用是什么?

我正在查看Devise代码并注意到大多数控制器都会产生正在创建的资源。 class Devise::RegistrationsController < DeviseController # … def create build_resource(sign_up_params) resource.save yield resource if block_given? # … 这必须是某种可扩展性function,但我真的不知道如何将块传递给控制器​​操作? 注意:这个问题是关于如何在Rails请求周期中实际执行的操作,而不是关于Ruby中的块如何工作。

如何将CanCan与多种设计模型集成?

我将如何定义几个设计模型的能力?

在Devise中将name属性添加到`User`

我正在尝试为Devise提供的User模型添加name属性。 我在我的数据库中添加了一个“名称”列,并更改了注册视图,以便它询问用户的名字: Sign up resource_name, :url => registration_path(resource_name)) do |f| %> “devise/shared/links” %> 它允许我登录,但是当我这样做后检查数据库时,请输入name: nil 。 我是否必须向Devise的User控制器添加内容? 谢谢!

如何同时覆盖Devise控制器和设计路由?

我使用Rails 4.0.2和Devise 3.2.2来处理用户注册/身份validation。 我用谷歌搜索并搜索stackoverflow的答案,无法找到能够回答我问题的东西。 下面的代码是我的routes.rb ,我已经跳过所有会话路由和注册路由但由于某种原因,Devise没有使用我的自定义registrations_controller.rb,因为如果是,它应该重定向到/ pages / success(请参见下面我的registrations_controller.rb) 的routes.rb App::Application.routes.draw do resources :posts resources :questions get “users/:id”, to: “users#show” devise_for :users, :controllers => {:registrations => “registrations”}, :skip => [:sessions, :registrations] as :user do get ‘login’ => ‘devise/sessions#new’, :as => :new_user_session post ‘login’ => ‘devise/sessions#create’, :as => :user_session delete ‘signout’ => ‘devise/sessions#destroy’, :as => :destroy_user_session […]

Rails 4应用程序中的子域名

今天我遇到了一个相当奇怪的现象。 在开发一个Rails应用程序时,每个用户都有自己的子域,并尝试使用Devise来完成它,我遇到了也没有注册任何路由到根页面的子域。 因此,例如,即使没有(显式)子域,它也会将我路由到主应用程序页面。 也许这与我的特定设置有关? 我也尝试了一个新的Rails项目,但我得到了相同的结果。 有人能为我澄清一下吗? Railscasts没有做到这一点。 此外,现在我正在使用WEBrick,即使这不是我将在生产中使用的,我正在使用域lvh.me来访问子域。 谢谢您的帮助。 编辑:这是我的routes.rb文件: Rails.application.routes.draw do devise_for :users root ‘static_page#index’ end 我遵循Devise wiki的这个指南: https : //github.com/plataformatec/devise/wiki/How-to :-Scope-login-to-subdomain 所以我做的是通过迁移删除了电子邮件的唯一性,然后我添加了:子域到request_keys,如下所示: devise :database_authenticatable, :recoverable, :rememberable, :trackable, :timeoutable, request_keys: [:subdomain] 然后我继续覆盖“find_for_authentication”函数,如下所示: def self.find_for_authentication(conditions={}) conditions[:account_id] = Account.find_by_subdomain(conditions.delete(:subdomain)).id super(conditions) end 这就是总结它。 编辑:我一直在搞乱,我发现了问题。 ‘root’指令将所有子域引用到我的域。 因此,如果我从routes.rb中删除root,则每个子域都会导致RouteError。 我记得在我的应用程序中为Devise需要一个root。 所以我不确定这是Devise的行为还是root。