小编Jam*_*sen的帖子

使用Authlogic时如何编写和测试密码更改?

我继承的应用程序具有以下更新用户配置文件的操作:

class UsersController < ApplicationController
  # ...
  def update
    @user = current_user
    if @user.update_attributes(params[:user])
      flash[:notice] = "Successfully updated profile."
      redirect_to root_url
    else
      flash[:error] = "Hrm, something went wrong."
      render :action => 'edit'
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

表单PUTS(真的POSTS采用一_method=PUT)该操作有一个passwordpassword_confirmation领域,但没有old_password现场.我通过测试注意到我甚至不需要填写该password_confirmation字段.

第一个问题:使用Authlogic时是否有更成熟的密码更改方式?

第二个问题:是否有关于密码更改的最佳实践(特别是从可用性角度)的文献?它应该是一个单独的表单,而不是与其他用户字段混合使用?

第三个问题:大多数网站都有一个old_password字段,但Authlogic似乎不支持本地.什么是Authlogic-ey方式确认它实际上是用户他/她自己更改密码而不是那些黑客入侵会话的人?

ruby testing ruby-on-rails authlogic

5
推荐指数
1
解决办法
1094
查看次数

如何让搜索引擎索引页面的所有语言变体?

我有一个页面,翻译有多种语言版本.我正在努力成为一名优秀的HTTP公民:

  • 我根据Accept-Language标题返回正确的版本
  • 我返回Vary: Accept-Language

(我网站的用户可以在用户个人资料中覆盖这些设置,但我认为这与手头的讨论无关.)

如何让搜索引擎索引所有变种?

后来

谷歌网站管理员中心博客推荐使用URL和使用Accept-Language检测语言.他们的解决方案肯定会有效,但似乎反HTTP.

seo http internationalization

5
推荐指数
1
解决办法
310
查看次数

如何安全地管理一次性脚本来修复数据?

偶尔,软件会出问题.当出现问题时,可能发生的最糟糕的事情之一是系统将某些数据保留在不一致或无效的状态.当然,我们试图减少这些情况,但它们确实发生了.

它们发生时,我们通常必须采取一些数据清理的形式采取纠正措施.(除了加强允许不一致的代码之外.)我在清理中看到的一些技术包括

  1. 直接编辑生产数据库
  2. 使用像Rails这样的REPL rails console来通过代码编辑生产数据
  3. 编写脚本然后运行它
  4. 编写Rails迁移然后运行它

与直接访问版本相比,脚本和迁移版本具有以下几个优点:

  1. 团队可以使用拉取请求或其他代码审查技术来确保脚本按预期运行
  2. 脚本留下来作为团队所做事情的记录
  3. 该脚本可以在非生产环境中运行,也可以在"干运行"模式下运行

不幸的是,如果签入,这些脚本也具有明显的安全劣势:它们将PII或其他敏感数据从数据库泄漏到源代码控制中.例如,

# 2013-07-05: delete all of Susan Yee's OAuth tokens because she's locked out
User.find_by_email('susan.yee@example.com').oauth_tokens.delete_all!
Run Code Online (Sandbox Code Playgroud)

我可以想到几种解决这种风险的方法:

  1. 喜欢脚本中的不透明标识符.我是这样的,但是(a)它并不总是可能的,(b)它也准确地模糊了正在发生的事情,减少了审计日志的价值.
  2. 移动防火墙内的所有源代码控制.这肯定更安全,但意味着团队无法利用许多基于云的工具(例如Code Climate,TravisCI)
  3. 将脚本与种子数据分开.以参数化方式编写脚本,即使它们只使用一次.这样可以将敏感数据保留在源代码控制之外,但这意味着所做内容的记录更难拼凑起来.

有没有人有成熟的技术?

ruby security debugging ruby-on-rails

5
推荐指数
1
解决办法
563
查看次数

如何使用Sinon测试Ember.run.later?

我有一些设置超时的Ember代码:

var MyObject = Ember.Object.extend({
  setFooToBarLater: function() {
    Ember.run.later(this, 'set', 'foo', 'bar', 500);
  }
});
Run Code Online (Sandbox Code Playgroud)

我想用Sinon的假时钟测试一下.这是我试过的:

var clock = sinon.useFakeTimers();
var myObject = MyObject.create();
myObject.setFooToBarLater();
clock.tick(600);
expect(myObject.get('foo')).to.be('bar');
Run Code Online (Sandbox Code Playgroud)

expect总是在之前运行set.我也尝试clock.tick在运行循环中包装:

Ember.run(clock, 'tick', 600);
Run Code Online (Sandbox Code Playgroud)

sinon ember.js

5
推荐指数
1
解决办法
1604
查看次数

浏览器之间的HTML差异

您知道在不同浏览器中处理HTML标签/属性有什么不同吗?例如,我曾经看过一个带有输入标签的页面,其maxlength字段设置为"2o".Firefox和Opera忽略"o",并将最大长度设置为2,而Internet Explorer完全忽略该字段.你知道了吗?

(注意:看到这可能是一个列表,如果差异的一般名称是粗体文本,那将是很好的,例如:标记属性中不同的不规则值处理)

html browser

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

Rails的最佳永久化

您认为在Rails中创建SEO友好URL(动态)的最佳方法是什么?

ruby seo ruby-on-rails permalinks

4
推荐指数
1
解决办法
1534
查看次数

需要建议:子菜单的Rails视图结构?

想象一下,在您的应用程序中有两个RESTful控制器(UsersController,OffersController)和一个PagesController(用于静态内容,如index,about等).

您定义了以下路由:

map.with_options :controller => 'pages' do |pages|
  pages.root :action => 'index'     # static home page
  pages.about :action => 'about'    # static about page
  # maybe more static pages...
end
map.resources :users    # RESTful UsersController
map.resources :posts    # RESTful PostsController
Run Code Online (Sandbox Code Playgroud)

您的应用程序布局如下所示:

<html>
  <head>
    <title>Demo Application</title>
  </head>
  <body>
    <ul id="menu">
       <li>
         <%= link_to 'Home', root_path %>
       </li>
       <li>
         <%= link_to 'Offers', offers_path %>
         <ul id="submenu>
           <li><%= link_to 'Search', 'path/to/search' %></li>
           <li>maybe more links...</li>
         </ul>
       </li>
       <li>
         <%= link_to 'About', about_path %> …
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails

4
推荐指数
1
解决办法
2220
查看次数

如何在Rails中解决"index unique_schema_migrations已存在"?

运行rake db:migrate后跟rake test:units产生以下内容:

rake test:functionals
(in /projects/my_project)
rake aborted!
SQLite3::SQLException: index unique_schema_migrations already exists: CREATE UNIQUE INDEX "unique_schema_migrations" ON "ts_schema_migrations" ("version")
Run Code Online (Sandbox Code Playgroud)

相关部分db/schema.rb如下:

create_table "ts_schema_migrations", :id => false, :force => true do |t|
  t.string "version", :null => false
end

add_index "ts_schema_migrations", ["version"], :name => "unique_schema_migrations", :unique => true
Run Code Online (Sandbox Code Playgroud)

我不是在任何地方手动更改此索引,而是使用Rails的默认SQLite3适配器和全新的数据库.(也就是说,rm db/*sqlite3之前运行rake db:migrate没有帮助.)

test:units任务是否可能尝试重新加载架构?如果是这样,为什么?它不应该认识到架构已经是最新的吗?

ruby migration ruby-on-rails

4
推荐指数
1
解决办法
4348
查看次数

如何在"render:template => ..."之后访问"assign"?

我的ApplicationController中有一个错误处理方法:

rescue_from ActiveRecord::RecordNotFound, :with => :not_found

def not_found(exception)
  @exception = exception
  render :template => '/errors/not_found', :status => 404
end
Run Code Online (Sandbox Code Playgroud)

RAILS_ROOT/app/views/errors/not_found.html.erb,我有这个:

<h1>Error 404: Not Found</h1>
<%= debug @exception %>
Run Code Online (Sandbox Code Playgroud)

@exception总是nil在那里.我试过了debug assigns,但总是这样{}.打电话时不会复制分配render :template吗?如果是这样,我怎么能得到它们?

我在边缘Rails.

ruby ruby-on-rails actionview

4
推荐指数
1
解决办法
1070
查看次数

如何在LaTeX中发出引用的文本内容?

我有一节:

\section{Introduction} \label{sec:introduction}
Run Code Online (Sandbox Code Playgroud)

我想要一个链接到链接文本是该部分名称的部分.我可以用hyperref:

The \hyperrf[sec:introduction]{Introduction} introduces the paper.
Run Code Online (Sandbox Code Playgroud)

但这需要重复章节标题("简介").有没有办法抓住它?ref产生节号,这是不对的. autoref产生"部分",然后产生部分编号,这也是不正确的.

latex

4
推荐指数
1
解决办法
2492
查看次数