Tag: 设计

绕过Devise gem注册表以创建新用户?

我是设计gem并在rails项目中重新开始 任何人都可以给我一个提示: 如何创建一个绕过recaptcha并且不提交设计forms的新用户的新用户。

如何自定义Devise以在会话中存储更多信息?

似乎当Devise记录用户时,只有用户ID存储在会话中。 这意味着每次调用current_user都会导致SQL查询(类似于User.find(:id) )来创建User对象,这在很多情况下是不必要的加载。 例如,我们可能希望在右上方的标题中显示用户的名称,该标题位于布局文件中并在每个响应中呈现。 为此,我们可能只编写current_user.name ,这会导致对users表的SQL查询。 我真的想在会话中存储当前用户的一些基本信息(例如名称和电子邮件),以避免额外的SQL查询。 这个问题的正确解决方案是什么?

自定义设计api令牌身份validation

使用令牌身份validation查找注册用户的最佳方法是什么? 我目前的方式是查询数据库以获取应用程序发送以访问api的令牌。 例如’user = User.where(:authentication_token => params [:authtoken])。first’。 这样安全吗? 我见过使用warden.authenticate的代码和执行ff的另一个代码:客户端发送电子邮件和authtoken。 然后,它使用电子邮件查找用户,然后与发送的令牌以及在db电子邮件查询中找到的用户的令牌进行设计安全比较。 这是设计令牌可validation要点中的解决方案,用于滚动您自己的令牌身份validation。 我是否应该在每个请求中发送电子邮件和令牌?

测试Devise正在后台工作人员中重新发送确认指示电子邮件

如果他们在注册后的两天内没有确认,我想第二次向用户发送Devise确认说明,但是我似乎无法通过我的成功案例测试。 背景工作者(每天运行一次): class ResendConfirmationWorker include Sidekiq::Worker sidekiq_options queue: :resend_confirmation, retry: false def perform d = Time.zone.now – 2.days users = User.where.not(confirmation_sent_at: nil) .where(confirmed_at: nil) .where(created_at: d.beginning_of_day..d.end_of_day) users.find_each do |user| user.send_confirmation_instructions end end end RSpec测试: require ‘rails_helper’ describe ResendConfirmationWorker, type: :job do before do time = Time.zone.now – 2.days @user = create :unconfirmed_user, created_at: time, confirmation_sent_at: […]

使用HTTParty登录RESTful Rails应用程序

我有一个基于Rails 3.2 , Ruby 1.9和Devise 2的干净RESTful JSON API的Web应用程序。 我想编写一个基于HTTParty Web客户端的小脚本,以便经常执行某些操作(使用crontab)。 但是我们如何登录并保持会话打开(会话ID由HTTP HEADER传递,并且可能存储在cookie中)。 我真的没有这方面的经验。

安装Active Admin并获取ArgumentError

我正在尝试第一次使用ActiveAdmin w / Rails 4.安装所有相关gem后,我尝试运行安装程序,即: rails generate active_admin:install 这样做会给我以下错误: in `add_route’: Invalid route name, already in use: ‘admin_root’ (ArgumentError) 但是,我在routes.rb中没有任何’admin_root’路由,所以我有点困惑。 这是运行’rake routes’的输出: Prefix Verb URI Pattern Controller#Action exams GET /exams(.:format) exams#index POST /exams(.:format) exams#create new_exam GET /exams/new(.:format) exams#new edit_exam GET /exams/:id/edit(.:format) exams#edit exam GET /exams/:id(.:format) exams#show PATCH /exams/:id(.:format) exams#update PUT /exams/:id(.:format) exams#update DELETE /exams/:id(.:format) exams#destroy […]

Rails + Devise:如何覆盖before_filter“authenticate_user!”的重定向

我在Rails 3和最新版本的Devise上,我在AdminController有一个beforefilter来authenticate_user! 我需要在重定向之前为request.referrer存储一个会话变量,以便我可以在尝试继续时将其发送回/ admin页面。 我会在哪里覆盖authenticate_user! ? 我想做的是这个,但我不知道在哪里定义它: def authenticate_user! session[:return_to] = request.request_uri super end

在rails 4中,如何在创建之前操纵强参数?

我试图将表格多个选择字段中的数组转换为用逗号分隔元素的字符串。 我正在使用的gem需要一个以逗号分隔的字符串forms的tag_field,但是我的多个select字段会创建一个数组。 强参数拒绝数组,因此我需要将数组转换为字符串。 这是我现在在我的应用程序控制器中的代码,但它不起作用。 def configure_devise_params devise_parameter_sanitizer.for(:sign_up) do |u| u[:tag_list].join(‘, ‘) u.permit(:email, :password, :password_confirmation, :profile_name, :how_did_you_hear, :first_name, :last_name, :type, :tag_list) end end 在我添加:tag_list之前,我有以下代码可以工作: def configure_devise_params devise_parameter_sanitizer.for(:sign_up) do |u| u.permit(:email, :password, :password_confirmation, :profile_name, :how_did_you_hear, :first_name, :last_name, :type) end end 我该如何解决? 谢谢。

在function规范中,如何测试成功调用Devise邮件程序?

我有一个用户注册function测试。 如何测试Devise确认说明是否正确发送? 我不需要测试电子邮件的内容,只需要调用邮件程序。 我在后台发邮件。 #user.rb def send_devise_notification(notification, *args) devise_mailer.send(notification, self, *args).deliver_later end 我尝试了一些适用于其他邮件程序的方法,包括 it “sends the confirmation email” do expect(Devise.mailer.deliveries.count).to eq 1 end 和 it “sends the confirmation email” do message_delivery = instance_double(ActionMailer::MessageDelivery) expect(Devise::Mailer).to receive(:confirmation_instructions).and_return(message_delivery) expect(message_delivery).to receive(:deliver_later) end 没有一个像Devise消息那样正常工作。 我究竟做错了什么? 编辑 function规范如下所示: feature “User signs up” do before :each do visit ‘/’ click_link ‘Sign up’ […]

在Rails Devise app中Find_for_database_authentication vs Find_by?

所以,我正在尝试使用设计建立一个React前端和Rails后端,而Rails端应该是一个内部API。 这是我第一次这样做,所以我正在努力进行身份validation。 具体来说,在我的SessionsController中,我有这样的代码: def create resource = User.find_for_database_authentication(email: params[:email]) return invalid_login_attempt unless resource if resource.valid_password?(params[:password]) sign_in :user, resource return render nothing: true end invalid_login_attempt end 这总是返回401 Unauthorized。 我检查调用valid_password的结果? 它总是假的。 但是,如果我用find_for_database_authentication替换find_by ,那么valid_password? 工作没有问题。 为什么是这样? 如果现在用户只能输入他的电子邮件而不是他的密码,这没关系,但这确实让我很困惑。 它也让我觉得这不会使用任何令牌检查(不同的问题)。 另一方面,我也想知道CSRF令牌是否适用于内部API(我应该使用不同的令牌身份validation吗?),以及如果用户使用登录表单我应该如何包含CSRF令牌尚未登录,但我猜这些是另一篇文章的问题。 谢谢你的帮助。