rails組件_devise_用戶系統(tǒng)

ruby環(huán)境

?  ruby -v
ruby 2.3.3p222 (2016-11-21 revision 56859) [x86_64-darwin15]
?  rails -v
Rails 5.0.2

先建立一個(gè)rails項(xiàng)目

rails new blog

在Gemfile里添加

gem 'devise'

然后運(yùn)行

bundle install

安裝好了devise的gem包以后, 安裝devise相關(guān)組件

?  blog/ rails generate devise:install
Running via Spring preloader in process 38288
      create  config/initializers/devise.rb
      create  config/locales/devise.en.yml

還有按照提示去配置

Some setup you must do manually if you haven't yet:

  1. Ensure you have defined default url options in your environments files. Here
     is an example of default_url_options appropriate for a development environment
     in config/environments/development.rb:

       config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }

     In production, :host should be set to the actual host of your application.

  2. Ensure you have defined root_url to *something* in your config/routes.rb.
     For example:

       root to: "home#index"

  3. Ensure you have flash messages in app/views/layouts/application.html.erb.
     For example:

       <p class="notice"><%= notice %></p>
       <p class="alert"><%= alert %></p>

  4. You can copy Devise views (for customization) to your app by running:

       rails g devise:views

/config/environments/development.rb 添加

  # devise setting
  config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }

/config/routes.rb 添加

  root to: "home#index"

/app/views/layout/application.html.erb 添加

    <p class="notice"><%= notice %></p>
    <p class="alert"><%= alert %></p>

輸入命令rails g devise:views 會(huì)生成devise的視圖文件

?  blog rails g devise:views
Running via Spring preloader in process 38720
Expected boolean default value for '--markerb'; got :erb (string)
      invoke  Devise::Generators::SharedViewsGenerator
      create    app/views/devise/shared
      create    app/views/devise/shared/_links.html.erb
      invoke  form_for
      create    app/views/devise/confirmations
      create    app/views/devise/confirmations/new.html.erb
      create    app/views/devise/passwords
      create    app/views/devise/passwords/edit.html.erb
      create    app/views/devise/passwords/new.html.erb
      create    app/views/devise/registrations
      create    app/views/devise/registrations/edit.html.erb
      create    app/views/devise/registrations/new.html.erb
      create    app/views/devise/sessions
      create    app/views/devise/sessions/new.html.erb
      create    app/views/devise/unlocks
      create    app/views/devise/unlocks/new.html.erb
      invoke  erb
      create    app/views/devise/mailer
      create    app/views/devise/mailer/confirmation_instructions.html.erb
      create    app/views/devise/mailer/password_change.html.erb
      create    app/views/devise/mailer/reset_password_instructions.html.erb
      create    app/views/devise/mailer/unlock_instructions.html.erb

輸入命令rails g devise user 生成需要用到devise的模型, 路由中會(huì)自動(dòng)生成一個(gè)devise_for :users

?  blog rails g devise user
Running via Spring preloader in process 38828
      invoke  active_record
      create    db/migrate/20170424093829_devise_create_users.rb
      create    app/models/user.rb
      invoke    test_unit
      create      test/models/user_test.rb
      create      test/fixtures/users.yml
      insert    app/models/user.rb
       route  devise_for :users

輸入命令rake db:migrate 執(zhí)行遷移文件

?  blog rake db:migrate
== 20170424093829 DeviseCreateUsers: migrating ================================
-- create_table(:users)
   -> 0.0014s
-- add_index(:users, :email, {:unique=>true})
   -> 0.0007s
-- add_index(:users, :reset_password_token, {:unique=>true})
   -> 0.0006s
== 20170424093829 DeviseCreateUsers: migrated (0.0029s) =======================

輸入命令rails generate controller home index 用來(lái)設(shè)置root頁(yè)面

?  blog rails generate controller home index
Running via Spring preloader in process 39045
      create  app/controllers/home_controller.rb
       route  get 'home/index'
      invoke  erb
      create    app/views/home
      create    app/views/home/index.html.erb
      invoke  test_unit
      create    test/controllers/home_controller_test.rb
      invoke  helper
      create    app/helpers/home_helper.rb
      invoke    test_unit
      invoke  assets
      invoke    coffee
      create      app/assets/javascripts/home.coffee
      invoke    scss
      create      app/assets/stylesheets/home.scss

在控制器中, 設(shè)置訪問(wèn)之前需要登錄

class HomeController < ApplicationController
  before_action :authenticate_user!, :only => [:index, :new]
  def index
  end
end

解釋一下:
user_signed_in? //判斷用戶是否登錄
current_user //獲取當(dāng)前登錄用戶
user_session //可以訪問(wèn)對(duì)應(yīng)的session

現(xiàn)在可以跑一下rails s 來(lái)看看效果
訪問(wèn)默認(rèn)頁(yè) http://127.0.0.1:3000/ 會(huì)被路由到 http://127.0.0.1:3000/users/sign_in

你將看到以下簡(jiǎn)陋的頁(yè)面, 實(shí)現(xiàn)了最簡(jiǎn)單的用戶系統(tǒng).
注冊(cè)頁(yè)(users/sign_up),
登入頁(yè)(users/sign_in),
忘記密碼頁(yè)(users/password/new)

登錄之后, devise默認(rèn)跳轉(zhuǎn)到了root, 要自定義, 去覆蓋after_sign_in_path_forafter_sign_out_path_for來(lái)自定義跳轉(zhuǎn)回調(diào)

待續(xù)寫

Reference

http://www.lxweimin.com/p/8dfff067197d

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 1.Environment Variables [finish] 2.Ruby Version Managers ...
    Jayzen閱讀 1,286評(píng)論 0 1
  • rails new movie_review git initgit add .git commit -am"In...
    棟棟曉閱讀 517評(píng)論 1 1
  • 基本使用在Gemfile里面添加gem 'devise'運(yùn)行bundle install然后安裝devise相關(guān)組...
    youngiyang_打碼少年閱讀 6,280評(píng)論 2 11
  • devise是一個(gè)很好的用戶登錄gem。但還是想自己寫個(gè)“輪子”,一則本來(lái)就是在學(xué)習(xí)rails,二則是了解了用戶登...
    kamionayuki閱讀 6,282評(píng)論 2 9
  • 如果沒(méi)有九群里各位老師的擾動(dòng),我就不會(huì)開始寫分享。現(xiàn)代人好像都在觀望,大道理誰(shuí)都懂,就是不行動(dòng)。我也在擾動(dòng)著家人和...
    悠揚(yáng)小徑閱讀 109評(píng)論 0 0