我有一个现有的Web应用程序,有几千个用户,我正在移植到Rails.当我重写和重构这个应用程序时,我可能需要在任意数量的不同服务器上运行它以进行开发,测试和生产.
我在我的用户模型中使用Rails的内置has_secure_password方法,但我担心密码数据的可移植性.我需要将数据库的内容从一台机器移动到另一台机器,以便在不同的环境中进行测试,并且非常重要的是我可以在每个环境中使用相同的用户和密码集测试用户身份验证功能.
到目前为止,很容易找到关于bcrypt-ruby如何与Rails一起工作的答案,has_secure_password
但经过数周的搜索后,我还没有找到明确的答案.
如果has_secure_password
将WorkFactor + Salt + HashedPassword中的结果连接并保存到password_digest
数据库列,则可以重新生成该哈希,并在移动到任何其他计算机时可靠地进行比较(假设任何其他计算机在类Unix操作系统上运行Rails)?
或者换句话说 - 使用Rails的has_secure_password
便携式生成的bcrypt-ruby密码?
后续问题:如果盐总是随机生成的(我看到相同的密码使用不同的哈希值,所以我不认为盐是从密码本身的文本创建的)那么Rails应用程序将如何能够可靠地在登录表单上重新提交密码提交,并将其与数据库中的内容进行比较.显然,为了比较它,它必须首先知道盐是什么.它是如何做到的?
我遇到了Codemirror的问题,其中实时预览模式不适用于Markdown.我基本上只是试图达到与SO相同的效果.实际预览适用于HTML但不适用于Markdown.我跟随了几个演示并尝试了一些没有运气的东西,我在这里作为最后的手段.这是相关代码:
在我的文档的头部我正在加载:
<script src="editor/lib/codemirror.js"></script>
<link rel="stylesheet" href="editor/lib/codemirror.css">
<script src="editor/lib/util/overlay.js"></script>
<script src="editor/mode/markdown/markdown.js"></script>
Run Code Online (Sandbox Code Playgroud)
注意:我在名为的文件夹中有Codemirror文件editor
.这是我所做的正常设置的唯一真正偏差.
然后在<body>
我的文档中,我有一个<form
带有2个元素的>:
<textarea id="content" name="content"></textarea>
和
<iframe id="preview"></iframe>
然后在我的页面底部我运行以下JavaScript(顺便说一下我也在使用jQuery 1.8.2):
// Initialize the editor when document finishes loading
jQuery(document).ready(function() {
var delay;
var editor = CodeMirror.fromTextArea(document.getElementById("content"), {
lineNumbers: false,
mode: 'markdown',
matchBrackets: false,
theme: "ambiance",
onChange: function() {
clearTimeout(delay);
delay = setTimeout(updatePreview, 300);
}
});
// Initialize the live-preview mode
function updatePreview() {
var previewFrame = document.getElementById('preview');
var preview = previewFrame.contentDocument || …
Run Code Online (Sandbox Code Playgroud)