Ruby on rails Rails是一种无需用户模型/登录即可处理站点上单个管理员的方法

Ruby on rails Rails是一种无需用户模型/登录即可处理站点上单个管理员的方法,ruby-on-rails,authentication,Ruby On Rails,Authentication,我想知道Rails处理这种情况的最直接或最规范的方式可能是什么。我有一个简单的博客网站。没有用户登录功能——用户只是可以阅读内容的网站访问者。我想能够通过管理员登录编辑内容。我将是唯一的管理员 创建一个用户模型只是为了给自己分配一个管理员的角色,这似乎有些过分。我看了一些Ryan Bates关于这个问题的文章,但我担心他的解决方案可能不安全(在App.Controller中以明文形式存储密码)。我能想到的唯一其他解决方案似乎也不太令人满意/安全:只是创建一个管理模型,并使用一个管理用户对数据库进

我想知道Rails处理这种情况的最直接或最规范的方式可能是什么。我有一个简单的博客网站。没有用户登录功能——用户只是可以阅读内容的网站访问者。我想能够通过管理员登录编辑内容。我将是唯一的管理员

创建一个用户模型只是为了给自己分配一个管理员的角色,这似乎有些过分。我看了一些Ryan Bates关于这个问题的文章,但我担心他的解决方案可能不安全(在App.Controller中以明文形式存储密码)。我能想到的唯一其他解决方案似乎也不太令人满意/安全:只是创建一个管理模型,并使用一个管理用户对数据库进行种子设定

如果您能提供任何关于最佳方式的反馈,以及不同方法的潜在利弊,我将不胜感激。显然,我觉得自己被困在了如何使用数据库中存储的安全/哈希密码创建一个管理员的问题上

提前谢谢

Auth方法:

如果它适合您的需求,您可以使用Ryan方法,但是这里也可以使用HTTP basic auth—您不需要任何表单视图

管理员用户名和密码可以通过多种方式存储:

  • 在文件中,就像指定数据库连接配置一样;然后您只需要从文件加载pass
  • 在控制器中,我看不到任何漏洞,除非您的代码库是公共的
  • 使用密码声明ENV变量,但这是其他方法中最不安全的方法
对于上述任何方法,最好使用一些加密

任何其他解决方案都需要数据库和至少声明一个模型。除此之外,使用sha1(密码)的简单用户模型不会使您的应用程序更安全。更精细的加密至少需要密码salt,您可以直接实现它,即从一些流行的身份验证gem复制+粘贴。

身份验证方法:

如果它适合您的需求,您可以使用Ryan方法,但是这里也可以使用HTTP basic auth—您不需要任何表单视图

管理员用户名和密码可以通过多种方式存储:

  • 在文件中,就像指定数据库连接配置一样;然后您只需要从文件加载pass
  • 在控制器中,我看不到任何漏洞,除非您的代码库是公共的
  • 使用密码声明ENV变量,但这是其他方法中最不安全的方法
对于上述任何方法,最好使用一些加密

任何其他解决方案都需要数据库和至少声明一个模型。除此之外,使用sha1(密码)的简单用户模型不会使您的应用程序更安全。更精细的加密至少需要密码salt,您可以直接实现它,即从一些流行的身份验证gem复制+粘贴。

身份验证方法:

如果它适合您的需求,您可以使用Ryan方法,但是这里也可以使用HTTP basic auth—您不需要任何表单视图

管理员用户名和密码可以通过多种方式存储:

  • 在文件中,就像指定数据库连接配置一样;然后您只需要从文件加载pass
  • 在控制器中,我看不到任何漏洞,除非您的代码库是公共的
  • 使用密码声明ENV变量,但这是其他方法中最不安全的方法
对于上述任何方法,最好使用一些加密

任何其他解决方案都需要数据库和至少声明一个模型。除此之外,使用sha1(密码)的简单用户模型不会使您的应用程序更安全。更精细的加密至少需要密码salt,您可以直接实现它,即从一些流行的身份验证gem复制+粘贴。

身份验证方法:

如果它适合您的需求,您可以使用Ryan方法,但是这里也可以使用HTTP basic auth—您不需要任何表单视图

管理员用户名和密码可以通过多种方式存储:

  • 在文件中,就像指定数据库连接配置一样;然后您只需要从文件加载pass
  • 在控制器中,我看不到任何漏洞,除非您的代码库是公共的
  • 使用密码声明ENV变量,但这是其他方法中最不安全的方法
对于上述任何方法,最好使用一些加密


任何其他解决方案都需要数据库和至少声明一个模型。除此之外,使用sha1(密码)的简单用户模型不会使您的应用程序更安全。更精细的加密至少需要密码盐,您可以直接实现它,即从一些流行的身份验证gem复制+粘贴。

如果您真的想避免使用整个模型(我认为这不是历史上最糟糕的想法),您仍然可以进行一些手动加密,并将其保存到控制器中。例如,以下视图代码将为您提供一些加密常量:

<% salt = Digest::SHA1.hexdigest("Make some unique salt using "+ Time.now.to_s) %>
<% password = "mypassword1" %>
<% encrypted_data = Digest::SHA1.hexdigest(password + " with some " + salt) %>

Salt: <%= salt %>
<br />
Encrypted: <%= encrypted_data %>
<br />
将这些常量存储到控制器或区域设置文件中比将实际密码存储在控制器中要安全一点,并且您仍然可以通过检查以下各项进行身份验证:

"cc4fe9875c67ac9d6505af1f627ba446bed78647" == Digest::SHA1.hexdigest(pass_from_form + " with some " + "f00ab3d3c576c97a43f87b556f0570dc088b2e81")
或者更好(使用区域设置):


如果您真的想避免使用整个模型(我认为这不是历史上最糟糕的想法),您仍然可以进行一些手动加密,并将其保存到控制器中。例如,以下视图代码将为您提供一些加密常量:

<% salt = Digest::SHA1.hexdigest("Make some unique salt using "+ Time.now.to_s) %>
<% password = "mypassword1" %>
<% encrypted_data = Digest::SHA1.hexdigest(password + " with some " + salt) %>

Salt: <%= salt %>
<br />
Encrypted: <%= encrypted_data %>
<br />
将这些常量存储到控制器或区域设置文件中比将实际密码存储在控制器中要安全一点,并且您仍然可以通过检查以下各项进行身份验证:

"cc4fe9875c67ac9d6505af1f627ba446bed78647" == Digest::SHA1.hexdigest(pass_from_form + " with some " + "f00ab3d3c576c97a43f87b556f0570dc088b2e81")
或者更好(使用区域设置):

如果