devise tree
作为Microverse的学生,我已经达到将Rails框架引入我的地步。 对我来说,它似乎是最好的预兆。 Ruby on Rails是许多新兴公司的起点,因为所有人都对它的美观和简单性视而不见。 我不得不承认,我有一段时间感到害怕了。 我当然不能说我们现在是最好的朋友,但是事情开始变得有意义。 Ruby on Rails是根据MVC原理设计的-模型视图控制器。
Devise是Rails的灵活身份验证解决方案
随着事情的发展,在Microverse中进行了4个月的编码后,现在该创建真正的东西了。 但是,等等,它们如何在应用程序中包含用户功能? 凭据保存在哪里,如何在不重新发明轮子的情况下实现呢?
一开始,这些类型的问题一直在我的脑海中浮现。 同学建议我冷静下来,花时间在文档上。 Rails的世界被称为gems的图书馆所环绕。 有什么您能想到的宝石。 在不浪费更多时间的情况下,让我们来看一下设计中的魔术。 让我们一起创建一个Rails 应用程序 。
rails new devise_gem
rails g scaffold Post post:text
rails db:migrate
rails s
- 从顶部开始,我们初始化一个名为devise_gem的新Rails应用程序。
- 我们使用scaffold命令为我们创建所有必要的文件,而不必自己键入所有这些文件。 邮政将成为我们的模型。 您可以根据需要替换它。 文本是我们的模型在数据库中的列类型。
- 为我们的应用程序迁移数据库。
- 运行服务器。 检查浏览器并确认一切正常。 您应该在localhost:3000中看到Rails的欢迎页面。
应用程序的基本结构已为我们创建。 很好吗?
update routes => config/routes.rb - root'posts#index'
restart the server always after modifying routes files or controllers files
Visit Gemfile in the root folder of your application
默认情况下,已经有许多gems库供您使用。 我们暂时不会处理这些问题。
在一般依赖项中添加devise gem (这意味着可以在组之外的任何位置。是的,您可以将其放在注释之间。也可以在注释上方保留注释,以防忘记这是什么。
[额外提示]:访问rubygems.org 。 从现在开始它将成为您的朋友。
gem ‘devise’
返回终端并捆绑安装,以获取项目中的devise依赖项。
在这一步上,我们需要为我们的应用设置设计。 这很简单,但是请确保您不会错过任何一步。 (做过几次)
rails g devise:install
Devise安装将要求您执行一些额外的步骤。 请一一执行 。 请记住,我们已经设置了路由文件 ,即使它不是devise告诉我们的,也不要感到困惑,因为devise提供了一个示例。 这意味着仅剩3个步骤。
最后,运行完所有命令后,我们还必须再做一次! 现在不要对您所有的抱怨大喊大叫。 由于不同的原因,所有这些都是必需的。
rails g deviseUser
仅此而已 。 您拥有在应用程序中拥有用户功能所需的一切。 从现在开始,一切都与您要使用它的方式有关。 我将向您展示一些基本的知识,但您可以自己进行测试。
访问app / controllers / posts_controller.rb
在类内部和顶部,我们添加一行:
before_action :authenticate_user!,except : [:index, :show]
这告诉我们的应用程序, un-authenticated
用户(即尚未在数据库中注册的用户)只能访问我们的索引并显示页面。
默认情况下, devise gem has only email and password as fields
。 如果我们也想拥有其他领域-我们现在要做-我们需要做一些事情。
Create RegistrationsController - (app/controllers/registrations_controller.rb)class RegistrationsController < Devise::RegistrationsController
private
def sign_up_params
params. require ( :user ).permit( :name , :username , :email , :password , :password_confirmation )
end
def account_update_params
params. require ( :user ).permit( :name , :username , :email , :password , :password_confirmation , :current_password )
end
然后,我们必须使用新控制器( config/routes.rb
)更新路由。
devise_for : users, controllers => { registrations: 'registrations' }
接下来,让我们创建一个迁移文件 ,其中包含我们要向用户请求的新字段 。 到目前为止,它们还没有出现在我们的数据库中 ,我们希望将它们包括进来,以防您尚未获得 。
rails g migration AddFieldsToUser - CamelCase
rails g migration add_fields_to_user - snake_case
他们俩的工作完全一样 。 选择更适合您的内容,但在键入时要小心。 一切在Rails上都很重要。
检查迁移文件,因为我们要在其中包含一些代码行 。 内部 更改方法:
add_column:users , :name , :string
add_column :users , :username , :string
add_index :users , :username , unique: true
您可能已经注意到,自生成脚手架Post模型以来,我们对数据库没有做任何事情。 到目前为止,我们仍在处理用户设置并自行设计配置。 我确定您认为所有这些都太多了,但是确实值得我们花费时间,因为如果我们想自己完成所有这些方法,我们将花费双倍的时间 。
现在进行迁移的时间:
rails db :migrate
从现在开始,我们在表中具有新字段 ,并且需要更新位于devise文件夹中的视图。
app/views/devise/registrations/new.html.erb.
< div class = "field" >
<%= f.label :name %> < br />
<%= f.text_field :name , autofocus: true %>
</ div >
< div class = “field ">
<%= f.label :username %> < br />
<%= f.text_field :username %>
</ div >
在控制器和模型之间创建关联
app/model/user.rb User model
has_many :posts
# app/model/post.rb
Post Model
belongs_to :user
rails g (generate) migration AddUserIdToPosts user_id:integer
迁移文件应如下所示:
def change
add_column :posts , :user_id , :integer
end
完成之后,我们必须配置post_controller以与Devise一起使用 。
def new
@post = current_user.posts.build
end
def create
@post = current_user.posts.build(post_params)
end
Devise为我们提供了许多内置方法,例如current_user,is_admin? 等等。您可以在Devise Github存储库中找到所有这些。 ( https://github.com/heartcombo/devise )
我知道我已经说过一遍,但是请记住,无论何时对终端中的控制器或路由进行更改以重新启动服务器,始终确保这是一个好主意,以确保现在已将所有更改加载到其中应用程序。 如果您现在尝试创建一个新的帖子,因为这是我们的根页面,您将到达登录页面。 当然, 到目前为止 ,我们还没有创建任何用户 。 如果要进入我们的应用程序并创建一些帖子,请执行此操作!
本文介绍了基本的知识。 我对它的简单性以及Ruby on Rails中逻辑的逻辑性着迷 。 在某些情况下,我想写论文给某人。 如果您还没有尝试过,我强烈建议您花一些时间。
最后但并非最不重要的一点是,与本文的主题完全无关,但是我认为将其作为结论是一个好主意。 请记住,我们的头脑喜欢与我们一起玩游戏。 我们想一次学习一切。 我们正在与他人进行自我比较。 我们感到恐惧。 冒名顶替综合症对我们作为开发人员的生活产生了巨大影响。 Rails可能已经过时,但是如果您擅长于此,肯定会需要它。 选择您的道路并保持专注。
身心健康!
- GitHub档案: https : //github.com/mariosknl
- 推特: https : //twitter.com/MariosKnl
- 作品集:marioskanellopoulos.com
- Microverse: https : //www.microverse.org/
非常感谢我在Microverse的所有同学,当然还有学校本身,因为有机会参与这个伟大的技术社区。
感谢您花时间阅读!
图片来源:Zane Lee
翻译自: https://hackernoon.com/how-to-create-auth-by-connecting-devise-into-your-ror-project-jp2o3ulc
devise tree