标签: devise

设计没有密码的更新用户

我想在没有密码的情况下更新用户属性.情况就像,如果密码和密码确认字段不是空白,那么我需要设计错误,如果它们是空白,则需要更新其他用户属性.我怎么能用设计做到这一点?

提前致谢!

ruby-on-rails devise

73
推荐指数
7
解决办法
5万
查看次数

设计和多个"用户"模型

我正在使用rails 3.2和设计2.0,我对Rails很新.

要求

我想实现以下目标:

  • 具有2个或更多"用户"模型,例如.会员,客户,管理员
  • 所有型号共享一些必填字段(例如电子邮件和密码)
  • 每个模型可能有一些独特的领域(例如,仅限客户的公司)
  • 某些字段可能是共享的但没有相同的验证(例如,客户需要名称,但会员可选)
  • 注册过程中必须填写所有字段,因此表单不同
  • 登录表单应该是唯一的

可能的解决方案

我用Google搜索并搜索了StackOverflow很长一段时间,但对我来说似乎没什么问题(我是一个Java人,对不起:)现在我很困惑.出现了两个解决方案:

单一设计用户

这是最常见的答案.只需创建默认设备用户并在会员 - >用户和客户 - >用户之间创建关系.我关注的是如何为每个模型实现自定义注册过程?我尝试了不同的东西,但一切都结束了!

多个设计用户

这解决了自定义注册过程,对我来说似乎是正确的,但唯一的登录表单是一个阻止程序.我在SO(Devise - 从两个模型登录)上找到了答案,建议覆盖Devise :: Models :: Authenticatable.find_for_authentication(条件).这似乎很复杂(?),因为我是铁杆新手,我想知道这是否有效?

谢谢你的建议!

ruby-on-rails devise

73
推荐指数
4
解决办法
5万
查看次数

在Rails中自定义Devise视图

我正在使用设计用户身份验证,但我有很好的模型用于注册,登录等页面.我已经完成了rails generate devise:views User命令并拥有了views文件夹中的所有视图,但是,当我用自己的new.html.erb替换registration/new.html.erb时,没有任何变化也没有看起来不同.就好像我做了什么.

任何人都知道我做错了什么或者至少知道如何成功定制设计视图

PS重要的是要注意我改变了设计路线/注册#new to/signup?

views ruby-on-rails devise

70
推荐指数
7
解决办法
7万
查看次数

这个Rails JSON身份验证API(使用Devise)是否安全?

我的Rails应用程序使用Devise进行身份验证.它有一个姐妹iOS应用程序,用户可以使用他们用于Web应用程序的相同凭据登录iOS应用程序.所以我需要某种API进行身份验证.

这里有很多类似的问题指向本教程,但它似乎token_authenticatable已经过时了,因为该模块已从Devise中删除,并且某些行会抛出错误.(我正在使用Devise 3.2.2.)我试图根据那个教程(和这个教程)推出自己的教程(但是这个),但我对它没有100%的信心 - 我觉得我可能会有一些东西被误解或错过了.

首先,按照这个要点的建议,我authentication_token在我的users表中添加了一个text属性,以及以下内容user.rb:

before_save :ensure_authentication_token

def ensure_authentication_token
  if authentication_token.blank?
    self.authentication_token = generate_authentication_token
  end
end

private

  def generate_authentication_token
    loop do
      token = Devise.friendly_token
      break token unless User.find_by(authentication_token: token)
    end
  end
Run Code Online (Sandbox Code Playgroud)

然后我有以下控制器:

api_controller.rb

class ApiController < ApplicationController
  respond_to :json
  skip_before_filter :authenticate_user!

  protected

  def user_params
    params[:user].permit(:email, :password, :password_confirmation)
  end
end
Run Code Online (Sandbox Code Playgroud)

(注意我application_controller有这条线before_filter :authenticate_user!.)

API/sessions_controller.rb

class Api::SessionsController < Devise::RegistrationsController
  prepend_before_filter :require_no_authentication, :only …
Run Code Online (Sandbox Code Playgroud)

security api json ruby-on-rails devise

70
推荐指数
1
解决办法
3万
查看次数

仅禁用生产环境的Devise注册

我正在推出一个包含精选用户组的测试版网站.我想仅在生产环境中禁用注册,并且只在很短的时间内禁用注册(即我不想完全注册我的注册).我知道我可以简单地隐藏"注册"链接,但我怀疑黑客比我更聪明,仍然可以使用RESTful路由来完成注册.禁用注册的最佳方法是什么,以便我的测试/开发环境仍然有效,但生产受到影响?谢谢你的任何指示.

我已经尝试以"sign_up"转到"sign_in"的方式指向命名范围,但它不起作用.这是我尝试过的:

devise_scope :user do
    get "users/sign_in", :to => "devise/sessions#new", :as => :sign_in
    get "users/sign_up", :to => "devise/sessions#new", :as => :sign_up
end
Run Code Online (Sandbox Code Playgroud)

理想情况下,我们会将用户发送到"pages#registration_disabled"页面或类似的内容.我只是想得到一些我可以玩的东西.

编辑:我已根据要求更改了模型,然后将以下内容添加到/spec/user_spec.rb

describe "validations" do
    it "should fail registration if in production mode" do
      ENV['RAILS_ENV'] = "production"
      @user = Factory(:user).should_not be_valid
    end
end
Run Code Online (Sandbox Code Playgroud)

它传递的是"真实的"而不是虚假的.有没有办法模拟生产环境?我只是在吐这个.

谢谢!

ruby-on-rails registration production-environment devise

69
推荐指数
4
解决办法
3万
查看次数

rails中的未定义方法`devise_for'

在我安装设计并创建用户模型之后.我rake db:migrate,然后我rake routes.然后我得到一个错误,"未定义的方法`devise_for'为#".可能导致此错误的原因是什么?

methods ruby-on-rails undefined devise

68
推荐指数
3
解决办法
3万
查看次数

rails 4中secret_key_base的用途是什么

我是Rails 4的新手,并且不理解在Rails 4中使用secret_key_baseunder config/secrets.yml.你能解释一下这个概念吗?

此外,当我在生产环境中我的工作,我提示设置secret_keydevise.rb,config.secret_keysecret_key_base.但是,我可以使用该rake secret命令生成一个新秘密.

开发和生产环境有什么区别?

secret_key当我secret_key_base每次生成时添加它时,它是如何匹配新生成的?

如何使用其他服务器保护应用程序?

ruby ruby-on-rails devise secret-key ruby-on-rails-4

68
推荐指数
2
解决办法
5万
查看次数

"警告:无法批量分配受保护的属性"

我已经使用RESTful技术生成模型(事实上,我正在使用Devise gem,它为我做了这个),并且我在模型中添加了名为first_name和last_name的新字段.迁移进展顺利.我将attr_accessor:first_name,:last_name添加到模型中,并期望它能正常工作.但是当我尝试使用Doctor.create({:first_name =>"MyName"})等大量分配新实例时,我收到错误,说我无法批量分配受保护的属性.

我认为使用attr_accessor的重点是绕过模型字段的保护.你能帮我理解这个消息吗?

编辑:哦,顺便说一下,记录也没有创建.我认为它们应该是因为这只是一个警告,但它们不在数据库中.

Edit2:这是我的模特

class Doctor < User
  has_many :patients
  has_many :prescriptions, :through=> :patients

  validates_presence_of :invitations, :on => :create, :message => "can't be blank"

  attr_accessor :invitations
end
Run Code Online (Sandbox Code Playgroud)

和模式,它没有first_name和last_name,因为它们是在users表中创建的,这是医生的祖先.我使用单表继承.

create_table :doctors do |t|
  t.integer :invitations

  t.timestamps
end
Run Code Online (Sandbox Code Playgroud)

这是用于更改users表的迁移

add_column :users, :first_name, :string
add_column :users, :last_name, :string
add_column :users, :type, :string
Run Code Online (Sandbox Code Playgroud)

编辑:这是种子文件.我不包括truncate_db_table方法,但它的工作原理.

%w{doctors patients}.each do |m|
  truncate_db_table(m)  
end  

Doctor.create(:invitations=>5, :email=>"email@gmail.com", :first_name=>"Name", :last_name=>"LastName")
Patient.create(:doctor_id=>1, :gender=>"male", :date_of_birth=>"1991-02-24")
Run Code Online (Sandbox Code Playgroud)

activerecord ruby-on-rails devise

67
推荐指数
2
解决办法
10万
查看次数

在哪里设计"aut​​henticate_user!"的实现 方法?

设计authenticate_user!方法在哪里设计?

我一直在寻找它,到目前为止还没有找到它.

ruby-on-rails oauth devise oauth-2.0

67
推荐指数
3
解决办法
4万
查看次数

Rails 3使用Devise:如何允许某人使用他们的Facebook帐户登录?

我有一个使用Devise进行身份验证的Rails 3应用程序.现在我需要允许某人使用他们的Facebook帐户登录.我认为这叫做Facebook Connect,但我也听过Facebook Graph API一词,所以我不确定我要求哪一个.

为了将Facebook Connect与Devise集成,我需要做些什么?

解:

这个问题现在很老了.一年前,Devise v1.2引入了OmniAuth支持.现在Devise处于v2.1(截至本文撰写时),使用OmniAuth更加容易.这是一个来自Devise wiki的精彩教程,它使用omniauth-facebook带有Devise 的gem来允许使用Facebook登录.

另外,请查看有关注册应用程序和使用Facebook Graph API的精彩教程.

facebook ruby-on-rails devise

65
推荐指数
5
解决办法
4万
查看次数