Tag: 设计

Rails 4 – 设计,访客用户导致filter链停止

我刚刚开始研究Rails 4(4.2.3)应用程序,我使用Devise进行用户身份validation。 我希望用户能够在签署upp之前通过创建测试项目并以guest用户身份登录来使用应用程序。 当用户注册(或进入)时,我想将测试项目分配给新的当前用户。 我一直在关注Platformatec的这个指南: https : //github.com/plataformatec/devise/wiki/How-To : -Create-a-guest-user 创建访客用户是有效的,但在注册或使用活动访客用户会话时,我收到以下错误: Filter chain halted as :require_no_authentication rendered or redirected 如果我清除我的会话它是有效的。 管理我的访客用户的方法如下所示: def current_or_guest_user if current_user if session[:guest_user_id] && session[:guest_user_id] != current_user.id logging_in guest_user(with_retry = false).try(:destroy) session[:guest_user_id] = nil end current_user else guest_user end end 如上所述,创建访客用户似乎工作得很好。 但这种逻辑永远不会发生: # should delete the guest user and clear the […]

无法安装Devise gem

我只是尝试安装设备并遇到了一些麻烦。 根据以前的经验,我知道当我安装它时,我需要做一些手动步骤。 那么这次没有手动步骤,但我仍然这样做,因为我知道他们必须完成。 所以一切正常,但后来我运行rails g devise: views返回 /Users/henrywyatt/.rvm/gems/ruby-2.0.0-p353/gems/devise-3.2.2/lib/devise/rails/routes.rb:469:in `raise_no_secret_key’: Devise.secret_key was not set. Please add the following to your Devise initializer: (RuntimeError) config.secret_key = ‘1ef096dceb32ce5af3b11a7ef99c00ab59b7ad90ed5dbacabe5e8cb8613e437799333b96e2045997d701a1ed1b1fde537b98f6ef1c64d247516b85c9410ad147′ Please ensure you restarted your application after installing Devise or setting the key. from /Users/henrywyatt/.rvm/gems/ruby-2.0.0-p353/gems/devise-3.2.2/lib/devise/rails/routes.rb:203:in `devise_for’ from /Users/henrywyatt/Desktop/pinteresting/config/routes.rb:2:in `block in ‘ from /Users/henrywyatt/.rvm/gems/ruby-2.0.0-p353/gems/actionpack-4.0.2/lib/action_dispatch/routing/route_set.rb:341:in `instance_exec’ from /Users/henrywyatt/.rvm/gems/ruby-2.0.0-p353/gems/actionpack-4.0.2/lib/action_dispatch/routing/route_set.rb:341:in `eval_block’ from /Users/henrywyatt/.rvm/gems/ruby-2.0.0-p353/gems/actionpack-4.0.2/lib/action_dispatch/routing/route_set.rb:319:in `draw’ […]

如何使用rails将devise sign_in信息传递到不同的应用程序中

我有3个应用程序需要使用SSO,https和devise进行身份validation相互通信。 我想弄清楚的是如何在一个rails应用程序上执行登录并让链接传递相关的(cookie,会话等),以便外部Web浏览器可以查看信息。 这是3个应用程序的流程。 第一个应用程序是WEB PORTAL。 它向api发送了一堆sso(单点登录)相关字符串。 第二个API_APP应用程序validation信息并将其传递给rails应用程序。 此RAILS_APP应用程序使用devise的“sign_in_and_redirect”帮助程序方法validationapi的信息并在用户中签名 现在这是一个棘手的部分。 如何将RAILS_APP中的信息沿着链路传递回WEB_PORTAL,以便它可以查看Web门户可以查看已登录的用户帐户? 更多信息: 我承认这种架构并不理想,但不幸的是它目前无法改变。 WEB_PORTAL实现并不那么重要,但我认为API_APP需要一些工作。 API_APP将信息格式化为net http请求,如此 uri = URI.parse(MY_RAILS_APP_URI) http = Net::HTTP.new(uri.host, uri.port) request = Net::HTTP::Post.new(uri.request_uri, initheader = {‘Content-Type’ =>’application/json’}) request.body = {“email” => email, “id” => id, “email” => email, “timestamp” => timestamp, “token” => token}.to_json response = http.request(request) location = response.header[‘location’] #if the RAILS_APP […]

Postgres:准备好的声明已经存在

我在我的Rails API应用程序中使用Devise进行身份validation。 有时我在日志中看到以下错误: ActiveRecord :: StatementInvalid:PGError:错误:准备好的语句“a3926”已经存在:UPDATE“users”SET“current_sign_in_at”= $ 1,“last_sign_in_at”= $ 2,“sign_in_count”= $ 3,“updated_at”= $ 4 WHERE“users”。 “id”= 12345 错误来自Devise: def update_tracked_fields!(request) old_current, new_current = self.current_sign_in_at, Time.now.utc self.last_sign_in_at = old_current || new_current self.current_sign_in_at = new_current old_current, new_current = self.current_sign_in_ip, request.remote_ip self.last_sign_in_ip = old_current || new_current self.current_sign_in_ip = new_current self.sign_in_count ||= 0 self.sign_in_count += 1 # error happens […]

设计/用户/ sign_in重定向到错误的控制器

命脉: ruby 1.9.3p194(2012-04-20修订版35410) [i686-linux] Rails 3.2.7 设计2.1.2 GET / users / sign_in正在尝试重定向到错误的控制器。 它已经停止重定向到wecome#welcome(有效),ans现在重定向到devise / welcome#welcome,这不存在并导致重定向出现500错误并记录以下错误: ActionController :: RoutingError(没有路由匹配{:controller =>“devise / welcome”,:action =>“welcome”}): 这最近开始,似乎是由一系列gem更新中的某些东西引起的。 它曾经完美地工作。 有没有人知道为什么会开始失败(ei更新哪个gem)或我能做些什么呢? 编辑: 这是routes.rb的根路由: root :to => “welcome#welcome” 我回滚到以前的部署,应用程序再次运行。 部署在rails 3.2.7之前。 的Gemfile: source ‘http://rubygems.org’ gem ‘rails’, ‘~> 3.2.1’ gem ‘rake’ # Bundle edge Rails instead: # gem ‘rails’, :git => ‘git://github.com/rails/rails.git’ gem […]

设计错误后重定向

在Devise中注册和忘记密码视图时,如果出现错误,它会将您重定向到父页面。 因此,在注册页面( /users/sign_up )上,如果出现错误,它会将您重定向到/ users并显示错误。 在忘记密码页面( /users/password/new )上,如果出现错误,它会将您重定向到/users/password并显示错误。 如何更改它以使其与登录页面完全相同,如果出现错误,它将保留在同一页面上并显示错误。 我查看了Devise并找不到重定向的位置。 这是我的Devise路线: devise_for :users, :skip => [:sessions] as :user do get ‘signin’ => ‘devise/sessions#new’, :as => :new_user_session post ‘signin’ => ‘devise/sessions#create’, :as => :user_session get ‘signup’ => ‘devise/registrations#new’, :as => :new_user post ‘signup’ => ‘devise/registrations#create’, :as => :create_user_session delete ‘signout’ => ‘devise/sessions#destroy’, :as => :destroy_user_session get […]

在这种情况下我应该使用多个线程吗?

我打开多个文件并一次处理一行。 这些文件包含分隔数据的标记,因此有时一个文件的处理可能必须等待其他文件赶上相同的标记。 我最初只使用一个线程和一个数组指示true / false,如果文件应该在当前迭代中读取,或者它应该等待其他一些人赶上。 使用线程会使这更简单吗? 更高效? Ruby有这个机制吗?

为什么Devise一直问我这个名字不能是空白的?

我是Rails的新手,我正在与Devise合作。 我面临的问题是我的表单在注册时没有更新用户的名称列。 我在数据表中有name属性,但我似乎无法使用设计注册中的表单来更改它。 Sign up resource_name, :url => registration_path(resource_name)) do |f| %> true %> class User < ActiveRecord::Base # Include default devise modules. Others available are: # :token_authenticatable, :encryptable, :confirmable, :lockable, :timeoutable and :omniauthable devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable has_many :posts end Scheme.rb ActiveRecord::Schema.define(version: 20130622203624) do create_table “posts”, force: true do |t| t.integer […]

Devise中的ArgumentError :: RegistrationsController#新错误的参数个数(2个为0..1)

我跟随Ryan bates RailsCast的设计和omniauth(第235集 – 设计 – 和 – omniauth – 修订版)。 当我尝试使用twitter登录时,我不断收到标题中的错误。 def self.new_with_session(params, session) if session[“devise.user_attributes”] new(session[“devise.user_attributes”], without_protection: true) do |user| user.attributes = params user.valid? end 完整追踪: C:/Ruby200-x64/lib/ruby/gems/2.0.0/bundler/gems/mongoid-fe7f43430580/lib/mongoid/document.rb:106:in `initialize’ devise (3.0.0.rc) lib/devise/models/confirmable.rb:46:in `initialize’ app/models/user/user.rb:58:in `new’ app/models/user/user.rb:58:in `new_with_session’ devise (3.0.0.rc) app/controllers/devise/registrations_controller.rb:86:in `build_resource’ devise (3.0.0.rc) app/controllers/devise/registrations_controller.rb:7:in `new’ actionpack (4.0.0.rc1) lib/action_controller/metal/implicit_render.rb:4:in `send_action’ actionpack (4.0.0.rc1) lib/abstract_controller/base.rb:189:in `process_action’ actionpack […]

rspec用户测试给出“未定义的局部变量或方法`confirmed_at’”

我的rspec测试给了我 NameError: undefined local variable or method `confirmed_at’ for # 我的用户规范是: require ‘spec_helper’ describe User do before(:each) do @user = Factory(:user) end # Factory will make sure that in the future if attributes are added the tests below don’t break # Just as long as the Factory is updated for the new attributes as appropriate. […]