如何用ruby 建立用户模型并储存信息在数据库中

如何用ruby 建立用户模型并储存信息在数据库中

在我们可以使用Desive之前,我们需要创建一个新的模型来存储有关我们产品的信息用户。按照惯例,这通常被称为用户模型。我们将使用Desive来创建它并为我们填充一些默认设置。

bundle exec rails generate devise user

这将创建一个用户模型(app/models/User.rb),并在你的应用程序的路由(config/routes.rb)来处理用户登录/注销/注册页面。您需要在工作表的后面添加epiCAS所需的一些数据库字段。

现在需要迁移数据库以添加users表(Desive已生成要执行此操作,请执行以下操作):bundle exec rails数据库:迁移。

devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable

这告诉Desive,这个特定的模型应该有许多Desive模块
提供给它:
● :database_authenticatable告诉Desive使用
数据库(下一节将详细介绍)
● :Registrable告诉Desive,用户可以从登录页面注册自己
● :可恢复告诉Desive提供“忘记密码”功能
● :rememberable告诉Desive,用户可以在“记住我”框中打勾,然后
自动登录到应用程序
● :validatable告诉Desive为用户提供的服务提供一些默认验证
电子邮件地址、密码长度等信息。

任务1-将Desive配置为使用电子邮件地址登录
您需要告诉Desive,我们将使用电子邮件地址而不是电子邮件地址登录
用户名。打开这个配置文件:config/initializers/designe。

任务2-种子第一个用户将以下内容添加到种子文件(db/seeds.rb),用自己的详细信息替换电子邮件地址和密码。
我们建议在本练习中使用虚拟密码,因为它可能稍后存储在版本控制中:

User.where(email:'[email protected]').first_or_create(pas sword:'Password123', password_confirmation:'Password123')

种子文件是一个脚本,可以运行它来填充数据库,对于创建第一个用户非常有用,这样你就可以登录到你的应用程序中(然后可以提供添加更多用户的功能)。上面这一行查询数据库中具有给定电子邮件地址的用户,如果用户存在,则返回该用户(第一个),或者使用给定参数创建一个新用户。我们在种子文件中使用first_或_create而不仅仅是create的原因是,如果种子文件多次运行,可以避免数据库中出现重复条目。

任务3-需要身份验证
尽管Desive现在已经安装,但它目前并不能保护您的应用程序。如果你来
在浏览器中使用应用程序时,您会注意到,您可以访问所有页面,而无需
被要求登录。
Desive使用了一个在动作前调用的控制器方法——如果您已经看过
使用脚手架生成器创建的控制器,您将看到使用的before_操作
检索相关控制器的模型。在动作告诉Rails执行之前在一个动作被调用之前。
在应用程序_控制器中的另一个前_操作行附近添加以下内容。

before_action :authenticate_user!

如果您现在尝试访问应用程序的主页:http://localhost:3000你会的已重定向到登录页面。
验证用户身份!是一种检查用户是否已登录的Desive方法
应用程序,如果没有,它会重定向他们登录。
默认情况下,上述before_操作将拦截控制器内的任何操作。这是不可取的。例如,您希望允许未经身份验证的用户访问产品,但防止他们创建或修改现有的产品或类别。在这个在这种情况下,可以向before_操作添加Exception属性:

before_action :authenticate_user!, only: [:new, :create]

任务4-显示当前用户和注销链接Desive不会自动更新应用程序以显示当前登录用户的信息,也不会允许他们执行其他Desive操作,例如注销。
不过,它确实提供了一些方法,让您可以自己完成这项工作:
● current_user允许您访问登录到Desive的当前用户。然后,您可以访问用户名或电子邮件地址等属性。
● 用户是否已登录?返回true或false,具体取决于当前是否有人登录Desive。
● destroy_user_session_path返回designe用于注销用户的路径,该路径应用于向用户提供注销链接。我们可以编辑应用程序的布局文件(app/views/layouts/application.html.haml)来使用这些方法。从包含此代码的行的开头删除“-#”,以取消对我们包含的代码的注释,小心确保它们正确缩进。现在,布局决定用户是否登录到Desive,并根据检查结果显示一些内容。如果他们已登录,他们的电子邮件地址将显示一个用于注销的链接。如果启动应用程序,现在应该可以使用seeds文件中指定的电子邮件地址和密码登录,并使用右上角的链接注销。

任务五 双重身份

root@LAPTOP-QH6KJ120:~/04-access-control-sample# bundle exec rails generate epi_cas:model User
      insert  app/models/user.rb
        gsub  app/models/user.rb
        gsub  app/models/user.rb
        gsub  app/models/user.rb
      create  db/migrate/20220303130003_add_ldap_info_and_clean_up_users.rb
root@LAPTOP-QH6KJ120:~/04-access-control-sample#

CanCanCan授权通常情况下,只有特定类型的用户才能在应用程序中执行特定操作。控制这种行为的机制被称为授权。例如,假设我们有两种类型的用户可以登录到我们商店的后端;“员工”只能编辑产品详细信息,“经理”可以添加新产品、删除产品、管理类别等。让我们创建一个迁移,向用户添加一个布尔字段,以表示用户是否只是一名员工,还是他们也是一名经理:运行以下命令:bundle exec rails generate migration add_manager_to_users将其添加到生成的迁移文件中,方法是:add_column:users,:manager,:boolean
这种方法的问题是,随着我们的应用程序的增长,跟踪这些规则变得越来越困难,更改这些规则变得风险和耗时。

为了简化授权,我们希望集中我们的规则,并推广我们的检查——CanCanCan gem允许我们通过在“能力”文件中定义用户可以做什么来做到这一点。一种能力直接转化为控制器中某个动作的名称(尽管你可以自己定义)。模特的标准能力是:● :index
● :new
● :create
● :edit
● :update
● :destroy
● :show
● :read
(a shortcut for :index and :show together)
● :manage
(a shortcut for all abilities, including any custom ones)

你可能感兴趣的:(Ruby,ruby,on,rails,ruby,sql,数据库)