Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Ruby

การตรวจสอบสิทธิ์ใน Rails โดยใช้ Clearance

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.erb

Tutsplus 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 จากเทอร์มินัลของคุณ ชี้เบราว์เซอร์ของคุณไปที่ https://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