ruby環(huán)境
? ruby -v
ruby 2.3.3p222 (2016-11-21 revision 56859) [x86_64-darwin15]
? rails -v
Rails 5.0.2
先建立一個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 會生成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的模型, 路由中會自動生成一個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 用來設(shè)置root頁面
? 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è)置訪問之前需要登錄
class HomeController < ApplicationController
before_action :authenticate_user!, :only => [:index, :new]
def index
end
end
解釋一下:
user_signed_in? //判斷用戶是否登錄
current_user //獲取當(dāng)前登錄用戶
user_session //可以訪問對應(yīng)的session
現(xiàn)在可以跑一下rails s 來看看效果
訪問默認(rèn)頁 http://127.0.0.1:3000/ 會被路由到 http://127.0.0.1:3000/users/sign_in
你將看到以下簡陋的頁面, 實(shí)現(xiàn)了最簡單的用戶系統(tǒng).
注冊頁(users/sign_up
),
登入頁(users/sign_in
),
忘記密碼頁(users/password/new
)
登錄之后, devise默認(rèn)跳轉(zhuǎn)到了root, 要自定義, 去覆蓋after_sign_in_path_for
和after_sign_out_path_for
來自定義跳轉(zhuǎn)回調(diào)
待續(xù)寫