Tag: 认证

在我开始在线阅读之前,Sessions对我有意义

我从阅读Sessions vs Cookies中收集的主要内容是,Cookie存储在客户端,会话存储在服务器端。 如果会话存储在服务器端,那么服务器如何知道哪个客户端是他们的? 显然,必须在客户端进行某些操作。 每当我使用自动滚动用户身份validation时,我的users数据库表中都有一个session_token列。 然后,这个模块倾向于为我提供便利: module SessionsHelper def current_user User.find_by_session_token(session[:session_token]) end def current_user=(user) @current_user = user session[:session_token] = user.session_token end def logout_current_user! current_user.reset_session_token! session[:session_token] = nil end def require_current_user! redirect_to new_session_url if current_user.nil? end def require_no_current_user! redirect_to user_url(current_user) unless current_user.nil? end end 我相信存储在服务器端的会话,它们意味着每个用户都有session_token 。 此外,会话散列必须在客户端。 如果没有,它在哪里? 请注意,我正在存储用户的session_token,如下所示: session[:session_token] = user.session_token 。 最后,如果我认为会话是在客户端,那么它是如何保持安全的? 最后,这是否与在其他框架(如Django,php框架等)上处理会话的方式相同? […]

设计确认无法在最新版本中使用

我最近从Devise 1.2升级到1.4.9,除了我的确认模块外,一切似乎都有效。 电子邮件以及整个过程都有效。 但确认页面始终为空白。 它工作并确认电子邮件帐户,但它不会重定向用户并引发406错误。 对于错误确认尝试,它也是如此。 路由似乎工作正常,我已在我的用户模型中指定确认,并且没有其他任何更改。 有任何想法吗? 我是否遗漏了一些设置或需要更新1.4.9的内容? UPDATE 这似乎是生成URL的问题。 由于某些未知原因,它使用用户名前置确认URL? 这导致它破裂。 但我仍然不确定如何解决它。 HTTP://本地主机:5000 /用户/ confirmation.someusername confirmation_token = R7apAPhC5c3rszvhsowp 上面的URL中的用户名导致进程无法正常工作。 我检查了1.2(有效)控制器和新版本之间的差异。 1.2 # GET /resource/confirmation?confirmation_token=abcdef def show self.resource = resource_class.confirm_by_token(params[:confirmation_token]) if resource.errors.empty? set_flash_message :notice, :confirmed sign_in_and_redirect(resource_name, resource) else render_with_scope :new end end 1.4.9 # GET /resource/confirmation?confirmation_token=abcdef def show self.resource = resource_class.confirm_by_token(params[:confirmation_token]) if resource.errors.empty? set_flash_message(:notice, […]

如何在没有数据库的情况下使用Rails / Devise?

我正在创建一个不使用数据库的Rails应用程序。 相反,使用包装遗留系统的Ruby API来管理模型。 我有一个Ruby调用,允许我validation用户名/密码组合。 在这种情况下是否可以使用Devise(或其他一些现成的身份validation解决方案)? 我希望我可以在Devise中覆盖一些方法,并且仍然可以获得许多好处。 彼得。

未定义的方法`key?’ 为零:NilClass

我是Rails的新手,正在关注Ryan Bate关于如何制作一个简单的身份validation系统的教程( http://railscasts.com/episodes/250-authentication-from-scratch?autoplay=true )我正在经历它但得到了这个错误:` NoMethodError in UsersController#new undefined method `key?’ for nil:NilClass Rails.root: C:/Sites/authentication` 我真的不知道这意味着什么,因为我只是一个初学者,但这些是我的文件: 用户控制器: class UsersController “Signed up!” else render “new” end end end new.html.erb: Form is invalid 的routes.rb Authentication::Application.routes.draw do get “sign_up” => “users#new”, :as => “sign_up” root :to => “users#new” resources :users end 用户模型 class User create validates_presence_of :email validates_uniqueness_of :email […]

未定义的方法`admin?’ 为零:NilClass

我跟着railscast#250来自Scratch的身份validation并且得到了很好的工作。 现在我只想在我的索引页面上显示编辑和销毁链接给admin用户。 我已经设置了mu用户数据库,其中包含一个admin boolean字段,并尝试在另一个模型(hikingtrails)的视图中放置一个简单的if语句,只显示管理员用户的某些链接,但是当我尝试它时,我得到了这个错误, undefined method ‘admin?’ for nil:NilClass undefined method ‘admin?’ for nil:NilClass 数据库架构 create_table “users”, :force => true do |t| t.string “email” t.string “password_digest” t.boolean “admin” t.datetime “created_at”, :null => false t.datetime “updated_at”, :null => false end 用户模型 class User true has_secure_password end 应用控制器 class ApplicationController < ActionController::Base protect_from_forgery # fetch the currently […]

ActiveModel :: SecurePassword未定义方法`password_digest =’

我尝试按照http://bcardarella.com/post/4668842452/exploring-rails-3-1-activemodel-securepassword使用rails 3.1 ActiveModel :: SecurePassword 我最后得到了红灯…… user.rb class User { :on => :create } end factory.rb Factory.define :user do |f| f.email “foo@bar.com” f.password “foobar” f.password_confirmation { |u| u.password } end spec_user.rb describe User do it “should authenticate with matching username and password” do user = Factory(:user, :email => ‘frank@gmail.com’, :password => ‘secret’) User.authenticate(‘frank@gmail.com’, ‘secret’).should == […]

每个控制器操作切换Devise身份validation模块

我有一个使用Devise进行身份validation的Rails站点。 我有一个页面( PhotosController#create )需要在没有cookie的情况下对用户进行身份validation。 我正在使用Devise的:token_authenticatable模块执行此操作,如果提供的令牌与存储在服务器端的令牌匹配,则会对用户进行身份validation。 (如果你很好奇,请参阅这个问题 。) 在操作完成后过期或更改令牌是一个很好的策略。 这可以防止攻击者嗅探令牌并使用它成功地作为用户进行身份validation。 但是,在我的情况下,我无法过期或更改令牌,因为客户端照片上传器上传了多张照片,每张照片都会导致一个单独的POST到PhotosController#create 。 因此,如果我在成功创建后使令牌到期,则第二次,第三次等上传将失败。 设计模块在模型级别指定(例如User模型)。 我需要更多的粒度。 我的问题是,如何仅针对单个控制器的单个操作启用:token_authenticatable模块? 或者,等效地,如何为除一个操作之外的所有控制器和操作禁用:token_authenticatable模块?

设计 – 从两个模型登录

我有两个用户模型,第一个来自远程数据库作为遗留和内部公司目的。 (员工登录)。 其次是我们的公共注册项目并登录,但我想要一个登录表单。 我已经搜索了很长时间,但有些解决方案对我来说很困惑。 第一个遗产看起来像(仅用于阅读和身份validation): class CrmUser [:login] alias_attribute :encrypted_password, :crypted_password alias_attribute :password_salt, :salt # Setup accessible (or protected) attributes for your model attr_accessible :login, :password, :password_confirmation, :remember_me, :role_id, :first_name, :last_name 第二,对于公众和注册: class User [:login] alias_attribute :login, :email # Setup accessible (or protected) attributes for your model attr_accessible :login, :password, :password_confirmation, :remember_me, :role_id, :first_name, :last_name […]

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

我一直在研究一个项目,现在使用Devise进行用户身份validation。 无论何时创建用户,它都会为它们生成密码盐以及加密密码。 当我进入这个项目的尾端时,我正在测试用户注册,并注意到我的新角色没有在这些新用户的数据库中创建密码盐,而我的老用户都有盐。 新用户可以签到好,但我担心为什么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 应用程序/模型/ user.rb devise :database_authenticatable, :registerable, :confirmable, :recoverable, :rememberable, […]

为需要身份validation的操作设计操作筛选器

我正在使用设计进行身份validation,但是我无法看到和操作filter来指定需要用户登录的操作,这是否包含在设计gem中? 如果不是我怎么能创建一个,我有一个想法,但因为我是铁杆新手,我宁愿首先看一个更有经验的程序员的解决方案。