Clearance เป็นระบบตรวจสอบสิทธิ์ที่เรียบง่ายด้วยอีเมลและรหัสผ่านที่สร้างโดยทีมงานที่ Thoughtbot มีค่าเริ่มต้นตามความเห็นแต่มีวัตถุประสงค์เพื่อให้ง่ายต่อการแทนที่ ระบบได้รับการบำรุงรักษาอย่างแข็งขัน และคุณสามารถติดตามผลได้ที่ GitHub
ในบทช่วยสอนนี้ คุณจะเห็นวิธีผสานรวม Clearance เข้ากับแอปพลิเคชัน Rails เราจะใช้แอพพลิเคชั่นจิ๋ว เอาล่ะ!
เริ่มต้นใช้งาน
คุณจะเริ่มต้นด้วยการสร้างแอปพลิเคชัน Rails ของคุณ สำหรับจุดประสงค์ของบทช่วยสอนนี้ ฉันจะตั้งชื่อว่า tutsplus-clearance .
รางใหม่ tutsplus-clearance -T
นั่นจะทำให้เกิดความมหัศจรรย์
คุณจะต้องใช้ bootstrap เพื่อให้แอปพลิเคชันของคุณดูดี เพิ่ม Bootstrap gem ลงใน Gemfile . ของคุณ .
#Gemfile...gem 'bootstrap-sass'
ติดตั้ง gem โดยเรียกใช้ bundle install .
ตอนนี้แก้ไข application . scss มีลักษณะดังนี้:
#app/assets/stylesheets/application.scss@import 'bootstrap-sprockets';@import 'bootstrap';
ตั้งค่าการเคลียร์
เปิด Gemfile . ของคุณ เพื่อเพิ่มอัญมณีกวาดล้าง
#Gemfilegem 'การกวาดล้าง'
ตอนนี้ติดตั้งอัญมณี
bundle install
ณ จุดนี้ ให้รันคำสั่งตัวสร้างเพื่อติดตั้ง clearance .
rails generate clearance:install
สิ่งนี้จะสร้างเอาต์พุตบางส่วนบนเทอร์มินัลของคุณ ซึ่งดูเหมือนว่าฉันมีด้านล่าง:
สร้าง config/initializers/clearance.rb แทรก app/controllers/application_controller.rb create app/models/user.rb create db/migrate/20161115101323_create_users.rb*************** ******************************************************** **************ขั้นตอนต่อไป:1. กำหนดค่าจดหมายเพื่อสร้าง URL แบบเต็มในอีเมล:# config/environments/{development,test}.rb config.action_mailer.default_url_options ={ host:'localhost:3000' } ในการผลิต ควรเป็นชื่อโดเมนของแอปของคุณ2. แสดงเซสชันผู้ใช้และกะพริบ ตัวอย่างเช่น ในรูปแบบแอปพลิเคชันของคุณ:<% if signed_in? %> ลงชื่อเข้าใช้เป็น:<%=current_user.email %> <%=button_to 'Sign out', sign_out_path, method::delete %> <% else %> <%=link_to 'Sign in', sign_in_path %> <% end %> <% flash.each ทำ |key, value| %> <%=ค่า %>
<% สิ้นสุด %>
3. ย้ายข้อมูล:rake db:migrate********************************************** ******************************************* ก่อน>
เมื่อคุณรันคำสั่ง ไฟล์สองสามไฟล์ถูกสร้างขึ้นในแอปพลิเคชันของคุณ ไฟล์ดังกล่าวคือ clearance.rb ซึ่งคุณจะพบได้ใน config/initializers ไดเรกทอรี A User โมเดลก็ถูกสร้างขึ้นด้วย และนอกจากนั้นคุณยังมีไฟล์การโยกย้ายที่มีลักษณะดังนี้:
คลาส CreateUsers
ตามผลลัพธ์ สิ่งแรกที่คุณต้องทำคือแก้ไขสภาพแวดล้อมการกำหนดค่าของคุณ โดยไปที่ config/environments/development.rb และเพิ่มบรรทัดด้านล่าง เหนือ end ตัวคั่น
... config.action_mailer.default_url_options ={ โฮสต์:'localhost:3000' }สิ้นสุด
จากนั้นไปที่ config/initializers/clearance.rb เพื่อแก้ไข และเมื่อคุณอยู่ที่นั่นแล้ว ให้เปลี่ยนที่อยู่อีเมลของผู้ส่งจากค่าเริ่มต้นเป็นค่าที่คุณเลือก นี่คือสิ่งที่คุณจะเห็นเมื่อเปิดไฟล์
#config/initializers/clearance.rbClearance.configure do |config| config.mailer_sender ="reply@example.com" สิ้นสุด
คุณสามารถแทนที่การกำหนดค่าเริ่มต้นโดยวางในข้อมูลโค้ดต่อไปนี้และกำหนดค่าตามความต้องการของคุณ
#config/initializers/clearance.rbClearance.configure do |config| config.allow_sign_up =true config.cookie_domain =".example.com" config.cookie_expiration =แลมบ์ดา { | คุกกี้| 1.year.from_now.utc } config.cookie_name ="remember_token" config.cookie_path ="/" config.routes =true config.httponly =false config.mailer_sender ="reply@example.com" config.password_strategy =Clearance::PasswordStrategies::BCrypt config.redirect_url ="/" config.secure_cookie =false config.sign_in_guards =[] config.user_model =Userend
เรียกใช้คำสั่งเพื่อย้ายฐานข้อมูลของคุณ
rake db:migrate
เปิด PagesController . ของคุณ และเพิ่ม index การกระทำ
#app/controllers/pages_controller.rbclass PagesController
ถัดไป สร้างมุมมองสำหรับ index การกระทำที่คุณเพิ่งสร้างขึ้น
เพิ่มข้อมูลโค้ดด้านล่าง:
#app/views/pages/index.html.erbTutsplus Clearance
ยินดีต้อนรับสู่หน้า Clearance ของเรา
แก้ไขเส้นทางของคุณไปที่:
#config/routes.rbRails.application.routes.draw ทำการรูทไปที่:"pages#index"end
สร้างบางส่วนชื่อ _navigation.html.erb ภายใน layouts ไดเรกทอรี ซึ่งจะใช้เพื่อจัดการทุกอย่างที่เกี่ยวข้องกับการนำทางในแอปพลิเคชันของคุณ
วางโค้ดต่อไปนี้แล้วบันทึก
#app/views/layouts/_navigation.html.erb <% flash.each ทำ |key, value| %> <%=ค่า %>
<% สิ้นสุด %>
จำกัดการเข้าถึง
ด้วย Clearance คุณสามารถสร้างการจำกัดการเข้าถึงหน้าเฉพาะที่คุณเลือกในแอปพลิเคชันของคุณ มาดูกันว่าทำอย่างไร
สร้างมุมมองสำหรับ new การกระทำใน app/views/pages ชื่อของไฟล์ควรเป็น new.html.erb . วางโค้ดด้านล่าง
#app/views/pages/new.html.erbหน้าที่ถูกจำกัด
หน้านี้ถูกจำกัดเฉพาะผู้ใช้ที่ตรวจสอบสิทธิ์ หากคุณเห็นสิ่งนี้แสดงว่าคุณเป็นซุปเปอร์สตาร์!
ตอนนี้ คุณต้องเพิ่มบรรทัดด้านล่างใน config/routes.rb .
#config/routes.rb... ทรัพยากร :หน้า เท่านั้น::ใหม่...
สุดท้าย ไปที่ PagesController . ของคุณ ให้เหมือนกับที่ฉันมีด้านล่าง
#apps/controllers/pages_controller.rbclass PagesController
ในโค้ดด้านบนนี้ เรากำลังใช้ตัวช่วยการกวาดล้าง require_login เพื่อจำกัดการเข้าถึง new การกระทำ. หากต้องการดูวิธีการทำงาน ให้เปิดเซิร์ฟเวอร์ Rails ของคุณโดยเรียกใช้ rails server จากเทอร์มินัลของคุณ ชี้เบราว์เซอร์ของคุณไปที่ http://locahost:3000/pages/new และควรเปลี่ยนเส้นทางคุณไปยังหน้าลงชื่อเข้าใช้
การกวาดล้างยังมีข้อจำกัดในการกำหนดเส้นทางที่สามารถใช้ควบคุมการเข้าถึงได้
#config/routes.rbRails.application.routes.draw ทำข้อจำกัด Clearance::Constraints::SignedOut.new ทำ root to:'pages#index' end contraints Clearance::Constraints::SignedIn.new ทำ root ไปที่:"pages#new', as::signed_in_root endend
ในโค้ดด้านบนนี้ มีการสร้างเส้นทางอื่นสำหรับผู้ใช้ที่ตรวจสอบสิทธิ์แล้ว
การเอาชนะค่าเริ่มต้นการกวาดล้าง
มีหลายสิ่งหลายอย่างเกิดขึ้นเบื้องหลังเมื่อคุณเริ่มใช้ Clearance สิ่งที่คุณมองไม่เห็น อาจมีบางครั้งที่คุณต้องการปรับแต่งสิ่งต่าง ๆ ขึ้นอยู่กับข้อกำหนดของแอปพลิเคชันของคุณ การกวาดล้างทำให้คุณสามารถแทนที่การกำหนดค่าเริ่มต้นที่มาพร้อมกับได้
หากต้องการแทนที่ (หรือสร้าง) เส้นทางการกวาดล้าง ให้เรียกใช้คำสั่งนี้จากเทอร์มินัลของคุณ
rails generate clearance:routes
ไฟล์เส้นทางของคุณควรมีลักษณะดังนี้:
#config/routes.rbRails.application.routes.draw do resources :passwords, controller:"clearance/passwords", only:[:create, :new] ทรัพยากร :session, controller:"clearance/sessions" เท่านั้น :[:create] ทรัพยากร :users, controller:"clearance/users", only:[:create] do resource :password, controller:"clearance/passwords", only:[:create, :edit, :update] end get "/sign_in" => "clearance/sessions#new" เป็น:"sign_in" delete "/sign_out" => "clearance/sessions#destroy" เป็น:"sign_out" ได้รับ "/sign_up" => "clearance/users #new" เป็น:"sign_up" root to:"pages#index" resources :pages, only::newend
คำสั่งจะตั้งค่า config.routes . ด้วย การตั้งค่าเป็นเท็จใน config/initializers/clearance.rb ไฟล์. ซึ่งหมายความว่าไฟล์ที่กำหนดเองซึ่งเพิ่งสร้างขึ้นจะถูกใช้
หากต้องการสร้างมุมมองเพื่อแก้ไข ให้เรียกใช้:
rails generate clearance:views
ไฟล์บางไฟล์ที่จะถูกสร้างขึ้นได้แก่:
app/views/passwords/create.html.erb app/views/passwords/edit.html.erb app/views/passwords/new.html.erb app/views/sessions/_form.html.erb app/views /sessions/new.html.erb app/views/users/_form.html.erb app/views/users/new.html.erb config/locales/clearance.en.yml
คุณจะเห็นข้อความแจ้งในเทอร์มินัลขอให้เขียนทับ app/views/layouts/application.html.erb ไฟล์. เลือกตัวเลือกที่คุณต้องการ
เลย์เอาต์
ตามค่าเริ่มต้น Clearance จะใช้เค้าโครงเริ่มต้นของแอปพลิเคชันของคุณ หากคุณต้องการเปลี่ยนเลย์เอาต์ที่ Clearance ใช้เมื่อแสดงผลมุมมอง เพียงแค่ระบุเลย์เอาต์ในตัวเริ่มต้น
Clearance::PasswordsController.layout "my_passwords_layout"Clearance::SessionsController.layout "my_sessions_layout"Clearance::UsersController.layout "my_admin_layout"
วิธีการช่วยเหลือ
Clearance มอบวิธีการช่วยเหลือที่สามารถใช้ได้ใน controllers . ของคุณ , views และ helpers . วิธีการเหล่านี้รวมถึง signed_in? , signed_out? และ current_user . ตัวอย่างเช่น:
<% ถ้า sign_in? %> <%=current_user.email %> <%=button_to "ออกจากระบบ", sign_out_path, เมธอด::delete %><% else %> <%=link_to "ลงชื่อเข้าใช้", sign_in_path %><% สิ้นสุด %>
บทสรุป
การกวาดล้างมีหลายสิ่งหลายอย่างที่จะมอบให้คุณเมื่อพูดถึงการตรวจสอบสิทธิ์ ดังนั้นอย่าลืมลองใช้ในโครงการถัดไปของคุณ คุณสามารถเรียนรู้เพิ่มเติมโดยดูที่หน้า GitHub