标签: devise

Rails 3/Devise:密码盐不再被创建?

我一直在研究一个项目,现在使用Devise进行用户身份验证.无论何时创建用户,它都会为它们生成密码盐以及加密密码.

当我进入这个项目的尾端时,我正在测试用户注册,并注意到我的新角色没有为这些新用户在数据库中创建密码盐,而我的老用户都有盐.新用户可以签到好,但我担心为什么Devise不再创造盐.

我遇到的Devise唯一的奇怪之处就是当我升级模块并记住日志说有关删除加密的内容时,因为bcrypt现在是默认加密,或者是那种效果.我这样做了......不确定这是否与当前问题有关.

另外,想想也许是我的项目被打包了,我从零开始创建了一个全新的Rails应用程序并添加了Devise,甚至这个新项目也没有为用户创建盐.

在Devise中设置密码盐是否有新方法,或者是否有人知道为什么盐不再被创建?不幸的是,Devise wiki在这个问题上没有太多可说的内容,到目前为止谷歌一直没有成功.

或者......首先是否需要加盐?我想,看起来更安全.

我的用户/设计配置如下.

配置/初始化/ devise.rb

Devise.setup do |config|

  config.mailer_sender = "mail@domain.com"

  require 'devise/orm/active_record'

  config.authentication_keys = [ :login ]

  config.stretches = 10

  config.encryptor = :bcrypt

  # Setup a pepper to generate the encrypted password.
  config.pepper = "79c2bf3b[...]"

end
Run Code Online (Sandbox Code Playgroud)

应用程序/模型/ user.rb

  devise :database_authenticatable, :registerable, :confirmable,
         :recoverable, :rememberable, :trackable, :validatable
Run Code Online (Sandbox Code Playgroud)

UPDATE

我能够在Devise升级之后找到通知,其中包含......

[DEVISE] From version 1.2, there is no need to set your encryptor to bcrypt since encryptors are only enabled if you include :encryptable in your models. …
Run Code Online (Sandbox Code Playgroud)

authentication encryption ruby-on-rails salt devise

25
推荐指数
2
解决办法
1万
查看次数

Rails - 设计,如何禁用某些默认路由?

我想完全禁用路由/ users/sign_in以获取和发布.

我能够使用以下方法成功覆盖它们:

  devise_for :users do
      get "/admin" => "devise/sessions#new", :as => :new_user_session
      post "/admin" => "devise/sessions#create", :as => :user_session
  end
Run Code Online (Sandbox Code Playgroud)

当我运行rake路线时,我看到以下内容:

    new_user_session GET    /admin(.:format)                {:controller=>"devise/sessions", :action=>"new"}
    user_session     POST   /admin(.:format)                {:controller=>"devise/sessions", :action=>"create"}
    new_user_session GET    /users/sign_in(.:format)        {:action=>"new", :controller=>"devise/sessions"}
                     POST   /users/sign_in(.:format)        {:action=>"create", :controller=>"devise/sessions"}
Run Code Online (Sandbox Code Playgroud)

我可以从/ admin以及/ users/sign_in访问登录.但我想完全删除最后两行,是否可能?

我从文档中尝试了一些不同的组合,但它也覆盖了一些有用的组合,如密码/新密码/编辑路由.

ruby-on-rails devise ruby-on-rails-3 ruby-on-rails-3.1

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

用于#<ActiveRecord :: ConnectionAdapters :: TableDefinition:0x9dee690>的未定义方法`database_authenticatable'

我正在使用Active Admin gem为我的基于Quiz的小应用程序.但是当我执行rake db:migrate时,它给了我错误.以下是该命令的跟踪:

$ rake db:migrate RAILS_ENV=production --trace
** Invoke db:migrate (first_time)
** Invoke environment (first_time)
** Execute environment
** Invoke db:load_config (first_time)
** Invoke rails_env (first_time)
** Execute rails_env
** Execute db:load_config
** Execute db:migrate
==  DeviseCreateAdminUsers: migrating =========================================
-- create_table(:admin_users)
rake aborted!
An error has occurred, all later migrations canceled:

undefined method `database_authenticatable' for #<ActiveRecord::ConnectionAdapters::TableDefinition:0x9dee690>
/home/users/Documents/Quiz/db/migrate/20120509055635_devise_create_admin_users.rb:4:in `block in change'
/home/users/.rvm/gems/ruby-1.9.2-p318/gems/activerecord-3.2.3/lib/active_record/connection_adapters/abstract/schema_statements.rb:160:in `create_table'
/home/users/.rvm/gems/ruby-1.9.2-p318/gems/activerecord-3.2.3/lib/active_record/connection_adapters  /abstract_mysql_adapter.rb:432:in `create_table'
/home/users/.rvm/gems/ruby-1.9.2-p318/gems/activerecord-3.2.3/lib/active_record/migration.rb:466:in `block in method_missing'
/home/users/.rvm/gems/ruby-1.9.2-p318/gems/activerecord-3.2.3/lib/active_record/migration.rb:438:in `block in say_with_time'
/home/users/.rvm/rubies/ruby-1.9.2-p318/lib/ruby/1.9.1/benchmark.rb:295:in `measure'
/home/users/.rvm/gems/ruby-1.9.2-p318/gems/activerecord-3.2.3/lib/active_record/migration.rb:438:in …
Run Code Online (Sandbox Code Playgroud)

activerecord devise ruby-on-rails-3 ruby-on-rails-3.1 activeadmin

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

如何使用Devise根据角色重定向用户的主(根)路径?

我正在开发一个项目管理应用程序,在应用程序中,我有project_managers客户端.我正在使用Devise和CanCan进行身份验证/授权.

在登录后的什么时候我应该将用户重定向到他们自己的特定控制器/布局/视图?有没有一种方法来检查current_user.roleroutes.rb基础上,他们是否是一个项目经理或客户端,并设置了根(或重定向)?这是我在Devise某处可以做出的改变吗?

在此先感谢您的帮助! - 标记

authentication routes ruby-on-rails devise cancan

24
推荐指数
4
解决办法
2万
查看次数

添加索引到电子邮件列的罪魁祸首单元测试失败

我是设计和导轨的新手,我只是将设计与我的示例应用程序集成在一起.我注意到在创建用户模型之后,我的所有单元测试都失败了.我试着缩小它,发现即使生成的断言'真相' user_test.rb也失败了:

ActiveRecord::RecordNotUnique: SQLite3::ConstraintException: \
    column email is not unique: INSERT INTO "users" (...
Run Code Online (Sandbox Code Playgroud)

有一次我评论出add_index......

# add_index :users, :email, :unique => true
Run Code Online (Sandbox Code Playgroud)

...并通过它重新运行rake db:test:load并重新运行测试ruby -I test test/unit/user_test.rb.

有没有人经历过这个?

testing indexing unit-testing ruby-on-rails devise

24
推荐指数
2
解决办法
5498
查看次数

设计和iPhone应用程序之间的HTTP身份验证

我是ruby on rails的新手,但我想将我的SQlite数据库中的数据从我的iphone应用程序发送到rails web应用程序.就像"同步"服务一样.

我正在使用设计进行Web应用程序的身份验证.我启用了基本的HTTP身份验证,我可以卷入xml或json数据的网站.当我将帖子标题设置为JSON并使用用户名和密码时,我也可以将数据上传到网站.

这就是我被困的地方.

1)如何在第一次登录后让用户登录?每次我向网站发送数据时都使用http身份验证吗?我已阅读有关令牌身份验证但我不确定如何使用它.

2)我可以使用正确的用户名和密码将JSON数据发布到http:// localhost:3000/example之类的内容.但是,如果用户名和passowrd不正确,它将返回HTML内容.我是否必须写一些返回有关登录成功/ fialure的json数据的内容?

3)在我的iPhone应用程序和我的网络应用程序之间进行通信.我是否正确在Web应用程序端编写RESTful API?我需要使用有效资源吗?

我真的很难全面了解这一切是如何运作的.谢谢!

api ruby-on-rails http-authentication titanium devise

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

使用来自请求标头的auth_token而不是使用Rails 3/devise的POST/PUT参数

我需要在Rails 3.1 API中结合最新版本的设备使用基于令牌的身份验证.到目前为止没问题.

现在我不想将我的:auth_token附加到客户端的POST/PUT参数,而是将此令牌作为请求标头发送,如HTTP_X_MYAPP_AUTH_TOKEN".

我可以说服设计使用它而不是参数中的令牌吗?是否可以实现这两者,以便我的API用户可以通过请求头或POST/PUT参数发送令牌?

问候.费利克斯

authentication ruby-on-rails token devise

24
推荐指数
1
解决办法
2万
查看次数

如何将Devise的'超时'模块添加到现有的Devise安装中? - Rails 3.1

这些是将模块添加到现有Devise安装的说明:https://github.com/plataformatec/devise/wiki/How-To :-change-an-already-existing-table-to-add-devise-required -列

但我似乎无法找到必要的列timeoutable.

我查找timeoutable了Devise库中需要的字段:https://github.com/plataformatec/devise/blob/master/lib/devise/schema.rb - 但该模式文件中没有这样的方法.

该模型只有一个自定义方法,没有引用列:http://rdoc.info/github/plataformatec/devise/master/Devise/Models/Timeoutable

如何添加该功能?

谢谢.

ruby-on-rails devise ruby-on-rails-3 ruby-on-rails-3.1

24
推荐指数
2
解决办法
9340
查看次数

如何更改"设计:密码重置指令电子邮件的主题"

我只是无法更改"密码重置说明"电子邮件的主题.我在Mailer中更改了notifer.rb以覆盖Devise默认电子邮件主题.但它不起作用.

在我的应用程序中,Devise .yml文件中有默认的电子邮件主题.但是我希望通过从数据库中提取数据来改变它.

ruby ruby-on-rails mailer devise

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

Rails 4 + Devise:无效的路由名称,已在使用中

我正在按照这个方法在注册成功后修改确认页面.

https://github.com/plataformatec/devise/wiki/How-To:-Redirect-to-a-specific-page-on-successful-sign-up-(registration)

我做的一切都像它说的但我得到这个错误:

in `add_route': Invalid route name, already in use: 'new_user_session'  (ArgumentError)
You may have defined two routes with the same name using the `:as` option, or you may be overriding a route already defined by a resource with the same naming. For the latter, you can restrict the routes created with `resources` as explained here: 
http://guides.rubyonrails.org/routing.html#restricting-the-routes-created
Run Code Online (Sandbox Code Playgroud)

我想wiki没有更新使用Devise with Rails 4,但我没有找到足够的信息来修复错误.

返回错误的行是next(routes.rb):

devise_for :users, :controllers => { :registrations => "registrations" }
Run Code Online (Sandbox Code Playgroud)

有什么建议吗?

谢谢.

编辑 -

registrations_controller.rb

class RegistrationsController < …
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails devise

24
推荐指数
1
解决办法
2万
查看次数