המחבר בחר ב- Girls Who Code לקבל תרומה כחלק מתוכנית Write for Donations.
הקדמה
האבן האב היא פתרון אימות עבור יישומי Ruby on Rails; היא עוזרת לך להגדיר אימות משתמש עבור פרויקטים שלך הכוללים כניסה משתמש עמוד והוספת תמיכה להתחברות עם OAuth שימוש ב- OmniAuth. האבן מספקת תכונות שימושיות רבות כמו טיפול במספר סשנים משתמש והוספת תמיכה להתחברות עם חשבונות צד שלישי, אפשרות לאפס סיסמאות שנשכחו, מעקב אחר מספר ההתחברויות וציוני זמן, הגדרת טיימאוטים, נעילת חשבונות, ועוד.
האבן הופכת אימות משתמש לפשוט כמו להתחיל את האבן וליצור מודל User
עם התכונות הנדרשות. אם היית מבנה אימות משתמש מאפס, היית צריך לכתוב קוד ובדיקות לכל התכונות שתרצה, ולטפל בכל המקרים הקצה בטיפול בסשנים, אחסון עוגיות, ושמירת הנתונים בטוחים. באמצעות האבן, אתה ממנע מעצמך לעשות את כל זה בעצמך ויכול להתמקד בבניית היישום שלך במקום.
במדריך זה, תיצור יישום אינטרנט קטן עם Rails ותתקין את Devise, שיאפשר למשתמשים ליצור חשבונות, להיכנס ולהתנתק מהחשבונות שלהם.
דרישות מוקדמות
כדי להשלים את המדריך הזה, תצטרך:
- A local development environment for Ruby on Rails. For Linux, you can follow our tutorial How To Install Ruby on Rails with
rvm
on Ubuntu 20.04 or use thervm
product docs for installing on Mac or Windows. You can also refer to the Ruby project docs to install Ruby directly in your system. To install the Rails gem, you can use the official Rails documentation. The Devise gem requires Ruby version 2.1.0 or greater; this tutorial was tested using Ruby version 3.0.2 and Rails version 7.0.3. - Node.js מותקן על המחשב שלך. כמה מתכונות של Rails, כמו צינור הנכסים, תלויים בסביבת JavaScript. Node.js מספק את הפונקציונליות הזו. עבור Ubuntu, התקן את Node.js באמצעות ה-PPA הרשמי, כפי שמוסבר באפשרות 2 של איך להתקין את Node.js על Ubuntu 20.04. עבור macOS, עקוב אחר המדריך שלנו איך להתקין את Node.js וליצור סביבת פיתוח מקומית על macOS.
- ידע ב-Ruby ובסביבת העבודה Ruby on Rails. ניתן לבדוק את המדריכים הראשונים מסדרת המדריכים שלנו Rails on Containers, או להשתמש ב-מדריכי Rails הרשמיים.
שלב 1 — יצירת יישום Rails חדש
בשלב זה, תיצור יישום Rails חדש ותפעיל אותו מקומית על המחשב שלך. תשתמש בפקודת שורת הפקודה rails
כדי לאתחל את הפרויקט.
הרץ את הפקודה הבאה מהטרמינל:
- rails new blog
הפקודה rails new
תיצור פרויקט Rails חדש בתיקייה blog
, הכוללת מספר קבצים ותיקיות שנוצרו אוטומטית. אחד מהם הוא קובץ ה-Gemfile, שמכיל את תלויות הפרויקט. תגדיר את קובץ ה-Gemfile כך שישתמש ב-Devise ב־שלב 3 — התקנה והגדרת Devise.
הערה: אם תקבל שגיאה שאומרת Could not find gem
, תוכל לפתור אותה על ידי העברתך לתיקיית הפרויקט שלך (cd blog
) והרצת הפקודה bundle install
, שתתקין את כל ה-gems שמופיעים בקובץ ה-Gemfile שלך.
תוכל לפתוח את התיקייה הזו בעורך הטקסט האהוב עליך או לנווט אליה באמצעות הטרמינל:
- cd blog
כדי להתחיל ביישום Rails, הפעל את שרת הפיתוח באמצעות הפקודה rails server
מתוך תיקיית הפרויקט:
- bundle exec rails server
פקודה זו תפעיל את שרת הפיתוח של Rails. פתח http://localhost:3000
בדפדפן שלך כדי לגשת לדף ברכת הפתיחה של Rails. Rails משתמשת בפתח 3000
כדי להפעיל את היישום אם לא סיפקת מספר פתח אלטרנטיבי.
**הערה:*הוספת bundle exec
לפקודתך תפעיל אותה בהקשר של החבילה הנוכחית. זה אומר שיעשה שימוש רק בקובץ ה-Gemfile המסוים של הפרוייקט ובגרסאות המגוין שמוגדרות בו. זה שימושי אם יש לך גרסאות שונות של אותם יישומים המותקנים באופן גלובלי.
עכשיו יש לך את אפליקציית ה-Rails החדשה שאתה תוסיף אימות משתמש בשלב מאוחר יותר. בשלב הבא, תחליף את דף הבית הברירת מחדל של Rails עם דף נחיתה מותאם אישית, שיעשה קל יותר לנווט דרך היישום הדוגמא לאחר שתוסיף את Devise. לאחר שתיצור דף נחיתה חדש, תוסיף קישורים עבור המשתמש להירשם ולהתחבר ליישום.
שלב 2 — יצירת דף נחיתה
כעת שיש לך את אפליקציית ה-Rails הבסיסית, תחליף את הדף הברירת מחדל של Rails עם הדף הנחיתה המשלך. דף נחיתה מותאם אישית יקל על ך להציג למשתמש קישורים להרשמה והתחברות ב-URL השורש של היישום. תוסיף קישורים ל התחברות
ול הרשמה
בשלבים מאוחרים.
כדי ליצור את דף הנחיתה שלך, יהיה עליך לעשות את הבא:
- הוסף את הנתיב בקובץ
config/routes.rb
. - צור מחלקת
HomeController
אשר תטפל בבקשות לנתיב זה. - צור קובץ תצוגה להצגה כאשר אתה מתמקד בנתיב.
תתחיל בהוספת הנתיב הראשי לקובץ routes.rb
שנוצר כאשר יצרת את הפרויקט.
באמצעות nano
או העורך הטקסט האהוב עליך, פתח את קובץ config/routes.rb
שנוצר בשלב קודם:
- nano config/routes.rb
הוסף את השורה המודגשת:
Rails.application.routes.draw do
root to: "home#index"
end
root to:
מגדיר איזו פעולת בקר תטפל בבקשות לנתיב הראשי – במקרה זה, הנתיב יהיה http://localhost:3000
, שהוא הפורט הברירת מחדל ליישומי Rails. הבקשות לנתיב זה ייטפלו על ידי הפעולה index
בבקר הhome
. כרגע הקובץ אינו קיים, אז עליך ליצור את הקובץ app/controllers/home_controller.rb
.
שמור וסגור את config/routes.rb
. באמצעות nano
, הקש CTRL+X
כדי לצאת, Y
כדי לשמור, וENTER
כדי לאשר את שם הקובץ ולסגור את הקובץ.
לבארץ, צור את הקובץ app/controllers/home_controller.rb
והוסף את השורות הבאות:
class HomeController < ApplicationController
def index
render
end
end
זו מחלקת HomeController
בסיסית עם שיטת index
שעושה דבר אחד: מציגה את קובץ התצוגה המשוייך לפעולת הבקר.
במקרה זה, קובץ התצוגה יהיה קובץ app/views/home/index.html.erb
. תצטרך ליצור גם את הקובץ הזה ואת התיקייה home
בתוך תיקיית app/views
.
שמור וסגור את קובץ הבקר home
.
לאחר מכן, צור את התיקייה home
בתוך תיקיית app/views
:
- mkdir app/views/home/
התיקייה home
תכיל את כל קבצי התצוגה עבור בקר Rails מסוים.
לאחר מכן, צור את קובץ ה-app/views/home/index.html.erb
והוסף את השורות הבאות:
<h1>Hello DigitalOcean!</h1>
app/views/home/index.html.erb
הוא קובץ התצוגה שפעולת ה-index
של הבקר Home
תציג. זהו קובץ HTML שבו ניתן להטמיע קוד Ruby. כאשר הנתיב הוגדר עבור פעולת הבקר הספציפית, קובץ זה נטען בדפדפן המשתמש.
שמור וסגור את הקובץ שלך.
כדי לראות את השינויים בכתובת URL הראשית, פתח http://localhost:3000
בדפדפן שלך (או רענן את העמוד אם הוא כבר פתוח). העמוד הראשי המעודכן יהיה דומה לזה:
ניתן להתאים אישית את העמוד זה נוסף אם נדרש, אך זהו כל מה שנדרש למדריך זה.
עכשיו שיש לך אפליקציה פשוטה של Rails עם דף נחיתה משלה, תוסיף אימות משתמש עם ג'ם ה-Devise.
שלב 3 — התקנה והגדרת Devise
בשלב זה, תתקין ותגדיר את Devise ביישום ה־Rails שלך כך שתוכל להשתמש בשיטות ובעוזרים שמגיעים עם האבן החן. תשתמש בשיטת user_signed_in?
כדי לבדוק את מידע ההפעלה של כל משתמש שנרשם החל בעוגיות הדפדפן. תשתמש גם בעוזר current_user
כדי לקבל את פרטי החשבון שכרגע מחובר. שתי השיטות מובנות ל־Devise ואתה יכול להשתמש בהן ישירות ביישום שלך מבלי לכתוב קוד נוסף. ניתן ללמוד עוד על שיטות העזר האלו מהעמוד GitHub של פרויקט Devise.
השלב הראשון להתקנת Devise הוא להוסיף את האבן החן לקובץ ה־Gemfile שלך, שמכיל מידע על כל התלויות שנדרשות כדי להפעיל את פרויקט ה־Ruby שלך. במקרה זה, כאשר אתה מאתחל את יישום ה־Rails, ה־Gemfile שנוצר כבר מכיל את כל האבנים הבסיסיות הנדרשות כדי להפעיל את Rails.
אך לפני שתבצע שינויים בקובץ ה־Gemfile שלך, עצור את שרת הפיתוח שאתה מפעיל מהשלב האחרון על ידי לחיצה על CTRL+C
בטרמינל שבו הוא פועל.
אז, פתח את קובץ ה־Gemfile שלך לעריכה. כדי להוסיף את אבן החן של Devise, הוסף את השורה המודגשת לסוף הקובץ, אך מחוץ לקבוצות development
ו־test
:
# ...
# מקטין זמני הטעינה דרך מטמון; דרוש ב־config/boot.rb
gem "bootsnap", require: false
# השתמש בגרסאות אקטיביות של אחסון [https://guides.rubyonrails.org/active_storage_overview.html#transforming-images]
# אבן "image_processing", "~> 1.2"
gem "devise"
group :development, :test do
# ראה https://guides.rubyonrails.org/debugging_rails_applications.html#debugging-with-the-debug-gem
gem "debug", platforms: %i[ mri mingw x64_mingw ]
end
# ...
שמור וסגור את הקובץ.
בשלב הבא, תתקין את האבן החדשה שנוספה על ידי הרצת פקודת bundle install
בטרמינל. מתוך ספריית הפרויקט (blog
), הרץ את הפקודה הבאה:
- bundle install
הפקודה תתקין את האבן Devise בפרויקט שלך, אשר תאפשר לך להשתמש בפקודת devise
עם כלי השורת פקודה rails
ולהגדיר את האימות.
כדי להגדיר את Devise בפרויקט שלך, הרץ את פקודת היצרן:
- bundle exec rails g devise:install
דגל ה־g
בפקודה למעלה מיועד ל־generate
ומשמש לקריאת מחוללי Rails. מחוללים ייצרו קבצים שיכולים לשמש כנקודת התחלה. ניתן לקרוא את מדריכי Rails למידע נוסף על מחוללי Rails.
הפקודה הקודמת תיצור מספר קבצים, כולל קובץ הגדרות התחלתי וקובץ הגדרות i18n עבור Devise. קובץ ההגדרות התחלתיות, המוסבר מטה בפירוט, משמש להגדיר את Devise בעת התחלת היישום לראשונה. i18n מיוצגת כ-בינלאומיות, שהיא תקן המסייע לך להפעיל את היישום שלך בשפות שונות.
בנקודה זו, הוראות מסוימות יודפסו גם בטרמינל, כך:
Output===============================================================================
Depending on your application's configuration some manual setup may be required:
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.
* Required for all applications. *
2. Ensure you have defined root_url to *something* in your config/routes.rb.
For example:
root to: "home#index"
* Not required for API-only Applications *
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>
* Not required for API-only Applications *
4. You can copy Devise views (for customization) to your app by running:
rails g devise:views
* Not required *
===============================================================================
למרות שההגדרה הידנית אינה דרושה להדרכה זו, יש להוסיף הודעות מהירות לnotice
ולalert
מאוחר יותר בשלב זה.
סיימת להתקין את Devise. השלב הבא הוא להגדיר כמה דברים בקובץ הגדרות ההתחלה שנוצר כעת.
כאשר ביצעת את הפקודה devise:install
, יוצרת config/initializers/devise.rb
, שהוא קובץ ההגדרות התחלתיות של Devise. בכל פעם שאתה מפעיל את יישום ה-Rails שלך, ריילס יטען את כל הג'מס והתוספות, ולאחר מכן יטען את כל קבצי ההגדרות ההתחלתיות. ניתן להגדיר הגדרות ספציפיות לחלקים שונים של היישום שלך מתוך קבצי ההגדרות ההתחלתיים הללו. כל ההגדרות ההתחלתיות הללו נמצאות בתיקיית config/initializers/
, ושם יוצר Devise את ההגדרות ההתחלתיות שלו גם.
פתח את config/initializers/devise.rb
לעריכה. בקובץ, אתה יכול למצוא את הקטע Devise.setup
ולהוסיף את השורה המודגשת הבאה (יתכנו קטעים נוספים של קוד בתוך בלוק ה-Devise.setup
, אך ניתן להתעלם מהם):
Devise.setup do |config|
# ...
config.navigational_formats = ['*/*', :html, :turbo_stream]
# ...
end
שורה זו מוסיפה את turbo_stream
כפורמט ניווט. טורבו סטרימים הם חלק מ-Turbo, שמאפשר לך לשלוח HTML שנוצר על ידי השרת ולהציג דפים בלעדיו של JavaScript רב. עליך להוסיף זאת עבור Devise 4.8.1
כדי שיעבוד עם Rails 7; אחרת, תקבל שגיאת undefined method user_url
.
שמור וסגור את הקובץ.
בנוסף, תוסיף את ההודעות הדהימה וההתראה שהוסברו בהוראות הקודמות. התגיות alert
ו־notice
הן המקומות בהם הודעות כמו "סיסמה שגויה" וכדומה יופיעו בממשק המשתמש. תמיד ניתן לממש הודעות התראה מותאמות אישית באפליקציה שלך (לדוג, אם אתה משתמש באינטרספטורים של Axios עם React כפרי-אנד), אך במסגרת המדריך הזה, תשלים את ההתקנה המינימלית עבור Devise.
פתח את app/views/layouts/application.html.erb
לעריכה. הוסף את התגיות של ההודעות "notice"
ו־"alert"
בתוך תג ה-body
, ישירות מעל <%= yield %>
:
...
<body>
<p class="notice"><%= notice %></p>
<p class="alert"><%= alert %></p>
<%= yield %>
</body>
כשהתצוגה נטענת בדפדפן, התג <%= yield %>
block יוחלף בתוכן מקובץ התצוגה שלך. בקובץ התצוגה שלך, היה לך רק תג p
. תג זה יוחלף בתוכן מהתצוגה שלך.
שמור וסגור את הקובץ.
בשלב זה, התקנת והגדרת Devise בפרויקט שלך. בשלב הבא, תיצור את מודל המשתמש שלך עבור היישום עם Devise ותגדיר אימות משתמש.
שלב 4 — יצירת מודל המשתמש עם Devise
אתה כעת מוכן ליצור את מודל המשתמש עם Devise, שיצור את קובץ המודל הנדרש ויבצע מיגרציה שתוכל להפעיל כדי ליצור טבלת users
ביישום שלך. כל פעם שמישהו נרשם, יהיה עליך ליצור רשומה חדשה בטבלת users
במסד הנתונים. בעזרת מודל המשתמש, תוכל לשנות רשומות אלו מתוך תצוגה חזית.
בשלב זה, תיצור מודל משתמש, תבדוק את התצורה ברירת המחדל, ואז תפעיל את המיגרציה כדי לעדכן את מסד הנתונים שלך.
מאחר ו-Rails הוא פרימוס-תצוגה-בקר (MVC) framework, לכל טבלה במסד הנתונים יש מחלקה הקשורה אליה, שניתן להשתמש בה לעבוד עם הנתונים בטבלה. במקרה זה, אם תיצור טבלת users
, תוכל להשתמש במודל User
לביצוע פעולות כמו User.first
או User.find_by_email("[email protected]")
. תוכל ליצור את המודל הזה על ידי יצירת כיתה רגילה המורכבת מ-ApplicationRecord
ב-Rails, אך יצירת מודל משתמש עם Devise נותן לך הרבה מתודולוגיה שאתה יכול להשתמש בה לצורך אימות.
ליצירת משתמש ב-Devise, הפעל את הפקודה הבאה של היצירה:
- bundle exec rails g devise user
הפלט הבא יודפס למסך:
Outputinvoke active_record
create db/migrate/20220908152949_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
הפלט מראה ש-Devise יצרה מספר קבצים, יצרה בדיקות, והוסיפה מסלולים. הקובץ הראשון, db/migrate/20220908152949_devise_create_users.rb
, הוא קובץ המיגרציה ליצירת טבלת users
בבסיס הנתונים שלך. קובץ מיגרציה ב-Rails מתאר את השינויים שיש לבצע בבסיס הנתונים. שם הקובץ של כל מיגרציה יכיל חותמת זמן כדי ש-Rails ידע באיזה סדר לבצע את השינויים.
Devise יצרה גם את קובץ מודל המשתמש (app/models/user.rb
), יחד עם בדיקות עבורו. השורה האחרונה בפלט מציינת שנוסף מסלול לקובץ הקיים של config/routes.rb
. Devise מוסיפה באופן אוטומטי את כל המסלולים כמו /users/sign_up
ו- /users/sign_out
באמצעות עזר ה- devise_for :users
.
לפני שתריץ את קובץ המיגרציה ותיצור את טבלת users
בבסיס הנתונים, בוא נבדוק את הקבצים שנוצרו. זה יעזור לך להבין את ההגדרות שנוצרו על ידי Devise כך שתדע מה קורה כשאתה מפעיל את המיגרציה.
התחל בפתיחת קובץ המיגרציה (db/migrate/20220908152949_devise_create_users.rb
) כדי לבדוק את הקוד הברירת מחדל:
# frozen_string_literal: true
class DeviseCreateUsers < ActiveRecord::Migration[7.0]
def change
create_table :users do |t|
## אימות מסד נתונים
t.string :email, null: false, default: ""
t.string :encrypted_password, null: false, default: ""
## החזרת סיסמה
t.string :reset_password_token
t.datetime :reset_password_sent_at
## זיכור פרטים
t.datetime :remember_created_at
## מעקב
# t.integer :sign_in_count, default: 0, null: false
# t.datetime :current_sign_in_at
# t.datetime :last_sign_in_at
# t.string :current_sign_in_ip
# t.string :last_sign_in_ip
## אישור דואר אלקטרוני
# t.string :confirmation_token
# t.datetime :confirmed_at
# t.datetime :confirmation_sent_at
# t.string :unconfirmed_email # רק אם משתמשים באישור חוזר
Devise כוללת אפשרויות רבות שימושיות, כמו שדות עבור טוקן איפוס הסיסמה והזמן שבו נשלח הטוקן האחרון, וכן הלאה. יש גם שורות לתכונות כמו אימות דואר אלקטרוני, נעילת המשתמש לאחר ניסיונות התחברות נכשלים, ואפילו מעקב אחר פרטי ההתחברות.
מכיוון שאין צורך לבצע שינויים, סגור את קובץ ההעברה.
ייצרו גם את קובץ המודל User
. יהיה זמין בתיקיית app/models/
.
פתחו את קובץ המודל app/models/user.rb
כדי לבדוק את הקוד הבסיסי:
class User < ApplicationRecord
# כלול מודולים ברירת מחדל של Devise. אפשרויות נוספות הן:
# :confirmable, :lockable, :timeoutable, :trackable ו :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable
end
A few options are added by Devise to configure how the user model works. The basic modules (database_authenticatable
, registerable
, recoverable
, rememberable
, and validatable
) are already included. There are some additional options commented out, corresponding to the extra features you saw in the migration file. You can add these modules to the model file and configure the migration, depending on how much functionality you need in your application.
זה מה שהמודולים הבסיסיים עושים:
database_authenticatable
: משתמשים יכולים לאמת את עצמם עם שדות כניסה וסיסמה. הסיסמה המוצפנת שלהם תאוחסן בבסיס הנתונים שלך.registerable
: משתמשים יכולים להירשם בעצמם ויכולים לערוך או למחוק את החשבונות שלהם.recoverable
: משתמשים יכולים לאפס את הסיסמה שלהם ולשחזר את החשבונות שלהם אם הם שכחו את פרטי הכניסה שלהם.rememberable
: מודול זה מזכיר לסשנים של משתמש על ידי שמירת המידע בעוגייה שלדפדפן.validatable
: מודול זה מספק תיקוני שגיאות עבור שדות האימייל והסיסמה של המשתמש. (לדוגמה, האם היישום שלך מבקש שהסיסמה תהיה לפחות שישה תווים, גם אם לא הגדרת כל תיקוני עבור המודל שלך.)
מודולים אלה כלולים במודל המשתמש שיצרתם כעת. תוכלו למצוא רשימה מלאה של המודולים שמגיעים עם Devise ב- מאגר הקוד של Devise ב- GitHub.
אין צורך לבצע שינויים, אז סגרו את קובץ המודל User
.
עדכון נוסף הוא שקובץ config/routes.rb
הוחלף כדי להוסיף שורת devise_for
עבור users
:
Rails.application.routes.draw do
devise_for :users
root "home#index"
end
זהו שיטה שימושית שמגדירה את כל הנתיבים הנדרשים הקשורים לאימות משתמש כמו /users/sign_in
, /users/sign_out
ו-/users/password/new
. Devise דואג לכל זה עבורך ואף שומר על קובץ הנתיבים נקי. אם ברצונך להבין כיצד הוספת devise_for :users
מתרגמת אוטומטית לכל הנתיבים הללו, תוכל לבדוק את הקוד מקור ב- מאגר הקוד של Devise ב- GitHub.
אין צורך לבצע שינויים כאן, אז סגור את קובץ config/routes.rb
.
כדי ללמוד אילו נתיבים מוגדרים באפליקציה שלך, תוכל לרשום אותם באמצעות הפקודה הבאה:
- bundle exec rails routes
הפקודה הזו מדפיסה את כל נתיבי האפליקציה ואת הבקרים שלהם. במקרה של אימות, כל הנתיבים הללו נוצרו על ידי Devise, ולא היית צריך להוסיף אותם באופן ידני.
הפלט יהיה ארוך, אך הנה קטע מספק מהנתיבים:
Prefix | Verb | URI Pattern | Controller#Action |
---|---|---|---|
new_user_session | GET | /users/sign_in(.:format) | devise/sessions#new |
user_session | POST | /users/sign_in(.:format) | devise/sessions#create |
destroy_user_session | DELETE | /users/sign_out(.:format) | devise/sessions#destroy |
new_user_password | GET | /users/password/new(.:format) | devise/passwords#new |
edit_user_password | GET | /users/password/edit(.:format) | devise/passwords#edit |
user_password | PATCH | /users/password(.:format) | devise/passwords#update |
PUT | /users/password(.:format) | devise/passwords#update | |
POST | /users/password(.:format) | devise/passwords#create | |
cancel_user_registration | GET | /users/cancel(.:format) | devise/registrations#cancel |
הנתיבים הרשומים בפלט הם הנתיבים שנוספו על ידי Devise כאשר כלולת את השורה devise_for :users
בקובץ הנתיבים שלך. אלה הם הנתיבים לפעולות כמו התחברות, הרשמה, איפוס סיסמה וכו'.
עכשיו שביקשת לבחון את הקבצים והתצורה שנוצרה על ידי Devise, תוכל להריץ את ההעברה שיצרת בתחילת שלב זה עם הפקודה הבאה:
- bundle exec rails db:migrate
הפקודה לעיל תבצע את כל השינויים בכל אחד מקבצי ההעברה שלך למסד הנתונים. השינויים צריכים להתבצע אחרי אחד, בדיוק כפי שהם מוגדרים בקבצים. Rails צריך לדעת את הרצף בו יש להריץ את ההעברות, ולכן הקבצים נוצרים עם חותמות זמן בשמותיהם.
הפלט דומה לזה שלמטה יודפס למסך:
Output== 20220908152949 DeviseCreateUsers: migrating ================================
-- create_table(:users)
-> 0.0040s
- add_index(:users, :email, {:unique=>true})
-> 0.0012s
- add_index(:users, :reset_password_token, {:unique=>true})
-> 0.0011s
== 20220908152949 DeviseCreateUsers: migrated (0.0074s) =======================
כאשר ההעברה תושלם, מסד הנתונים שלך יוכנס למצבו. עשית את כל מה שנדרש כדי להגדיר אימות משתמש בפרויקט שלך.
בנקודה זו, אנא הפעל מחדש את שרת ה-Rails שלך:
- bundle exec rails server
קובץ האיניציאליזציה שצוין למעלה נטען רק כאשר Rails מאתחל. עליך לאתחל את השרת כך ש-Rails יוכל לטעון את קובץ האיניציאליזציה החדש של Devise ולהגדיר הכל כך שאימות המשתמש יעבוד.
עבור ל־http://localhost:3000/users/sign_up
בדפדפן שלך, ושם תמצא טופס הרשמה ליצירת חשבון על ידי הזנת כתובת דוא"ל וסיסמה. (בשלב הבא, תוסיף כפתורים להרשמה ולהתחברות לדף הנחיתה כך שיהיה קל לקורא לנווט לכתובת ה-URL הזו.)
כדי לבדוק את האימות, הזן כתובת דוא"ל ניסיונית כמו [email protected]
וסיסמה.
פעם אחת שתירשם, תועבר לדף הבית, שמציג את שלום DigitalOcean! יחד עם הודעה האומרת שנרשמת בהצלחה, כמו כן:
הודעת ההצלחה בהרשמה הזו מוצגת בתוך התגית <p class="notice"><%= notice %></p>
שהוספת לקובץ application.html.erb
.
בנקודה זו, הגדרת אימות משתמש עם Devise בפרויקט שלך ונרשמת באמצעות חשבון דוגמא. הגדרת את Devise כך שיתאים לצרכי היישום שלך, ובעקבות זאת, Devise יצר את הנתיבים, התצוגות והבקרים שמקלים על תהליך ההרשמה של המשתמש.
עכשיו שאימתת שתהליך ההרשמה עובד כצפוי, השלב הבא הוא להוסיף אימות זה לעמוד הנחיתה שיצרת ב- שלב 2. בשלב הבא, תקשר את עמוד ההרשמה לעמוד הנחיתה כך שהמשתמשים לא יצטרכו לנווט ל-URL ספציפי כדי להירשם, כמו שעשית כאן.
שלב 5 — קישור האימות לעמוד הנחיתה
יש לך את כל הפונקציות המוגדרות בפרויקט שלך, אך עדיין עליך לחבר את דפי ה-Devise שנוצרו עם דף הנחיתה שלך. בשלב הקודם, ביקרת ידנית בדף /users/sign_up
כדי להיכנס. בשלב זה, תקשור את כל הדפים יחד על ידי הוספת הקישורים הדרושים לדף הנחיתה שלך. תציג קישורים להתחברות או התנתקות מהאפליקציה בהתאם למעמדם של המשתמשים.
תוכל לבצע זאת באמצעות מספר פעוט של מתודות עזר מה-Devise. ה-Gem של Devise מגיע עם הרבה מתודות עזר שאפשר להשתמש בהם מבלי לצטרך לממש הכל בעצמך. זה יקל על הקריאה ועל התחזוקה של הקוד.
תתחיל בהוספת קוד לבדיקה אם המשתמש מחובר. אם כן, דף הנחיתה יציג את כתובת האימייל שלהם וקישור להתנתקות מהאפליקציה. אם המשתמש לא מחובר, דף הנחיתה יציג קישור לעבור לדף ההתחברות.
פתח את הקובץ app/views/home/index.html.erb
לעריכה והוסף את השורות המודגשות:
<% if user_signed_in? %>
<div> Welcome <%= current_user.email %> </div>
<%= button_to "Sign out", destroy_user_session_path, method: :delete %>
<% else %>
<%= button_to "Sign in", new_user_session_path %>
<% end %>
<h1>Hello DigitalOcean!</h1>
user_signed_in?
מגיע ממתודות העזר הקשורות לבקרות של Devise. הוא בודק אם המשתמש מחובר או לא ומחזיר ערך בוליאני true
או false
. אתה יכול להשתמש בתוצאה הזו לתכנות פונקציות נוספות באפליקציה שלך, כמו להציג את מידע חשבונם של המשתמשים אם הם מחוברים. למידע נוסף על מתודת העזר הזו, תוכל לבדוק את קוד המקור במאגר GitHub של Devise.
current_user
הוא עוזר של Devise שמגיש את פרטי המשתמש שנכנס כעת ליישום. לדוגמה, אם תתחבר עם [email protected]
, העוזר current_user
יחזיר את מודל המשתמש עבור [email protected]
. לכן, בשימוש ב־current_user.email
, תקבל [email protected]
כתוצאה. על ידי שימוש ב־Devise, אתה ממנע מעצמך לבצע את הלוגיקה הזו מהתחלה, חוסך לך זמן ומאמץ.
לבסוף, עם קטע הקוד הזה, הוספת כניסה ו־יציאה לכפתורים לדף הנחיתה. בהתאם לתוצאת השיטת עוזר user_signed_in?
, תציג אפשרות להיכנס או להתנתק באמצעות הכפתורים כניסה ו־יציאה שהתווספו לאחרונה.
אתה משתמש בשיטת button_to
כדי להגדיר כפתור שמביא את המשתמש לנתיב מסוים. גם אתה משתמש בשיטות עוזר כדי לקבל את הנתיבים הללו: destroy_user_session_path
מקבל את /users/sign_out
ו־new_user_session_path
מקבל את /users/sign_in
. (ניתן לראות את רשימת העוזרים המלאה של כתובות ה־URL של הנתיבים על ידי הרצת bundle exec rails routes
, כפי שנאמר בשלב קודם.)
שמור וסגור את הקובץ.
רענן את העמוד בדפדפן כדי לראות את השינויים.
אם עדיין לא ניסית להירשם לאפליקציה שלך, תוכל לבקר בנתיב /users/sign_in
על ידי לחיצה על הכפתור התחבר בדף שלך. מכאן, תוכל להמשיך וליצור חשבון חדש על ידי לחיצה על הקישור הרשם בתחתית. הזן אימייל לדוגמה כמו [email protected]
וסיסמה. לאחר שתרשום, תועבר שוב לעמוד הנחיתה. כעת, עמוד הנחיתה מציג את כתובת האימייל של המשתמש המחובר כרגע, יחד עם כפתור התנתק, כפי שמוצג כאן:
. תקבל גם הודעה שאומרת, נרשמת בהצלחה
.
ועם זאת, התקנת בהצלחה את ג'ם Devise והגדרת אימות משתמש באפליקציה שלך.
סיכום
במדריך זה, השתמשת ב-Devise כדי להוסיף אימות משתמש לאפליקציה של Rails. באמצעות מתודות העזר של Devise, יצרת אפליקציה שבה משתמשים יכולים ליצור חשבונות, להירשם ולהתנתק.
כדי להבין טוב יותר את Devise ואת המתודות והעזרים הנוספים, כדאי לבדוק את קובץ ה-README במאגר ה-GitHub של Devise. כשלב הבא במדריך זה, תוכל לנסות להציג את הברכה "שלום עולם!" בעמוד באופן תנאי עם משהו כמו שלום שם משתמש
בהתאם לכך אם המשתמש מחובר או לא.
ניתן למצוא את הקוד עבור פרוייקט זה ב־מאגר ה־GitHub של קהילת DigitalOcean.