用户权限认证系统
Varsion
1
在查找了很多有关SaaS架构的资料并完成了项目架构以及初步的数据库设计之后,就。。(开始了长时间的摸鱼

Rails 已经有一个完善的用户认证系统 Devise gem ,考虑到其过于庞大,以及自己想尝试着完整一个类似的完善功能,就自己在一步一步的完成。

安全的用户认证

1
has_secure_password

这是 Rails 为用户验证提供的一个很好的内置方法,提供了一个完善的用户密码验证方式

  • 使用更安全的密码 依赖于 数据库 password_digest 字段
  • 依赖于 bcrypt gem
  • 获得一组虚拟属性 password 和 password_confirmation 创建用户对象时会检查该属性是否匹配
  • 获得 authenticate 方法 用于校验用户密码
1
2
3
4
5
class User < ApplicationRecord
###
has_secure_password
###
end

用户邮箱激活

Rails 的 Action Mailer 系统 同其他框架的邮件系统有一些差别,异常的方便,同时可以依靠 Rails Scaffold 从而快速的生成一系列邮件应用。

邮箱激活验证码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class User < ApplicationRecord
before_create :create_token_digest
####
class << self
# 生成一个用于账号验证的随机令牌
def new_token
SecureRandom.urlsafe_base64
end
# 返回指定字符串的哈希摘要
def digest string
cost = ActiveModel::SecurePassword.min_cost ? BCrypt::Engine::MIN_COST : BCrypt::Engine.cost
BCrypt::Password.create(string, cost: cost)
end
end
####
private
def create_token_digest
self.activation_token = User.new_token
self.activation_disest = User.digest(activation_token)
end
end

依赖于 Rails Active Record 的回调,在数据库对象创建之前(before_create)注意是创建之前,而不是保存之前(before_save)如果是保存之前的话,可能会涉及到用户更新信息时也会调用该回调。

在数据库对象创建并保存成功之后,将该对象丢给邮件系统,从而将账户激活信息传递给用户。

用户在邮箱中,点击相应链接从而激活账户。

对于 邮件验证码 的激活,是采用了额外的资源路由组,从而完成了激活。

从用户到组织

在用户和组织之间,设计了一个 “会话关系(session)”,一个会话将一个用户连接到了一个组织。

因为并没有限制一个用户只能加入一个组织,就是说一个用户同时可以是零个或者多个组织的员工。

在这种情况下,将用户和组织的关系以会话的形式进行管理。可以有效的使一个用户在多个组织之间跳转。是一个行之有效的办法。


  • Post title:用户权限认证系统
  • Post author:Varsion
  • Create time:2020-12-30 15:13:06
  • Post link:https://blog.varsion.cn/post/a38475f7.html
  • Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.
Comments