परिचय
ट्यूटोरियल के पहले भाग में, हमने सीखा कि डेविस को कैसे स्थापित करें और इसे अपने रेल एप्लिकेशन में कैसे सेट करें। इस भाग में, हम देखेंगे कि कैसे DeviseInvitable को एकीकृत किया जाए।
DeviseInvitable एक एक्सटेंशन है जो Devise के साथ काम करता है। आपके आवेदन में DeviseInvitable के साथ, आपके उपयोगकर्ता अपने दोस्तों को ईमेल के माध्यम से आमंत्रित कर सकते हैं। यदि आप एक सहयोग ऐप बना रहे हैं तो यह आपके एप्लिकेशन में शामिल करने के लिए एक शानदार सुविधा है।
deviseInvitable सेट अप करना
अपना Gemfile
खोलें और मणि जोड़ें:
#Gemfile ... gem 'devise_invitable'
इंस्टॉल करने के लिए कमांड चलाएँ bundle install
।
DeviseInvitable के कॉन्फ़िगरेशन विकल्प को Devise कॉन्फ़िगरेशन फ़ाइल में जोड़ने के लिए जनरेटर कमांड चलाएँ।
rails generate devise_invitable:install
आप config/initializers/devise.rb
. पर जाकर नए बदलाव देख सकते हैं अपने टेक्स्ट एडिटर के साथ।
इसके बाद, हमारे User
. में DeviseInvitable जोड़ें मॉडल।
rails generate devise_invitable User
इससे :invitable
जुड़ जाएगा अपने मॉडल को ध्वजांकित करें, इस प्रकार आपका उपयोगकर्ता मॉडल इस तरह दिखेगा:
#app/models/user.rb class User < ActiveRecord::Base # Include default devise modules. Others available are: # :confirmable, :lockable, :timeoutable and :omniauthable devise :invitable, :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable end
ऊपर दिए गए कमांड को चलाने से एक माइग्रेशन फ़ाइल भी उत्पन्न होती है जो मेरे पास नीचे की तरह दिखती है:
class DeviseInvitableAddToUsers < ActiveRecord::Migration def up change_table :users do |t| t.string :invitation_token t.datetime :invitation_created_at t.datetime :invitation_sent_at t.datetime :invitation_accepted_at t.integer :invitation_limit t.references :invited_by, polymorphic: true t.integer :invitations_count, default: 0 t.index :invitations_count t.index :invitation_token, unique: true # for invitable t.index :invited_by_id end end def down change_table :users do |t| t.remove_references :invited_by, polymorphic: true t.remove :invitations_count, :invitation_limit, :invitation_sent_at, :invitation_accepted_at, :invitation_token, :invitation_created_at end end end
अब rake db:migrate
. चलाकर अपने डेटाबेस को माइग्रेट करें ।
नियंत्रक को DeviseInvitable के लिए कॉन्फ़िगर करना
आमंत्रण भेजते समय कुछ मापदंडों को पारित करने के लिए DeviseInvitable की आवश्यकता होती है। इसके लिए काम करने के लिए, हमें उपयोग किए जाने वाले आवश्यक पैरामीटर को श्वेतसूची में डालना होगा। अपने टेक्स्ट एडिटर का उपयोग करके, app/controllers/application_controller.rb
पर नेविगेट करें और जैसा मेरे पास नीचे है वैसा ही अपना बनाएं:
#app/controllers/application_controller.rb class ApplicationController < ActionController::Base # Prevent CSRF attacks by raising an exception. # For APIs, you may want to use :null_session instead. protect_from_forgery with: :exception before_action :configure_permitted_parameters, if: :devise_controller? protected def configure_permitted_parameters added_attrs = [:username, :email, :password, :password_confirmation, :remember_me] devise_parameter_sanitizer.permit :sign_up, keys: added_attrs devise_parameter_sanitizer.permit :account_update, keys: added_attrs devise_parameter_sanitizer.permit :accept_invitation, keys: [:email] end end
ऊपर से आप देख सकते हैं कि :email
DeviseInvitable के लिए श्वेतसूची में डाल दिया गया है।
अब देखते हैं कि हमारे पास हमारे कंसोल के माध्यम से क्या है। अपने टर्मिनल पर, rails console
चलाएं और जो आपके पास है उसे नीचे दर्ज करें।
[1] pry(main)> User.invite!(:email => "[email protected]")
यह उस आउटपुट का उत्पादन करना चाहिए जो मेरे पास नीचे जैसा दिखता है, हालांकि इसमें अंतर होगा।
[2] pry(main)> User Load (78.3ms) SELECT "users".* FROM "users" WHERE "users"."email" = ? ORDER BY "users"."id" ASC LIMIT 1 [["email", "[email protected]"]] User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."invitation_token" = ? ORDER BY "users"."id" ASC LIMIT 1 [["invitation_token", "658da470d5fcbb2275f30bc1fb66f5771b889cec2f1e56f536319d2fd1ef4a92"]] (0.1ms) begin transaction SQL (67.8ms) INSERT INTO "users" ("email", "encrypted_password", "invitation_token", "invitation_created_at", "invitation_sent_at", "created_at", "updated_at") VALUES (?, ?, ?, ?, ?, ?, ?) [["email", "[email protected]"], ["encrypted_password", "$2a$11$0sLfqvfFDsebcmcQTUXzlOuqNIooL5z8niXeza8OUwNK3gZY/iRum"], ["invitation_token", "658da470d5fcbb2275f30bc1fb66f5771b889cec2f1e56f536319d2fd1ef4a92"], ["invitation_created_at", "2016-10-07 07:41:51.254047"], ["invitation_sent_at", "2016-10-07 07:41:51.254047"], ["created_at", "2016-10-07 07:41:51.255700"], ["updated_at", "2016-10-07 07:41:51.255700"]] (220.5ms) commit transaction Rendered /home/kinsomicrote/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/devise_invitable-1.7.0/app/views/devise/mailer/invitation_instructions.html.erb (2.5ms) Rendered /home/kinsomicrote/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/devise_invitable-1.7.0/app/views/devise/mailer/invitation_instructions.text.erb (88.0ms) Devise::Mailer#invitation_instructions: processed outbound mail in 247.1ms Sent mail to [email protected] (74.3ms) Date: Fri, 07 Oct 2016 08:41:51 +0100 From: [email protected] Reply-To: [email protected] To: [email protected] Message-ID: <[email protected]> Subject: Invitation instructions Mime-Version: 1.0 Content-Type: multipart/alternative; boundary="--==_mimepart_57f751bfcc725_18022ac6c272b12840524"; charset=UTF-8 Content-Transfer-Encoding: 7bit ----==_mimepart_57f751bfcc725_18022ac6c272b12840524 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Hello [email protected] Someone has invited you to https://localhost:3000/, you can accept it through the link below. https://localhost:3000/users/invitation/accept?invitation_token=xmW9uRfyafptmeFMmFBy If you don't want to accept the invitation, please ignore this email. Your account won't be created until you access the link above and set your password. ----==_mimepart_57f751bfcc725_18022ac6c272b12840524 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: 7bit <p>Hello [email protected]</p> <p>Someone has invited you to https://localhost:3000/, you can accept it through the link below.</p> <p><a href="https://localhost:3000/users/invitation/accept?invitation_token=xmW9uRfyafptmeFMmFBy">Accept invitation</a></p> <p>If you don't want to accept the invitation, please ignore this email.<br /> Your account won't be created until you access the link above and set your password.</p> ----==_mimepart_57f751bfcc725_18022ac6c272b12840524-- => #<User:0x00558d875fa798 id: 4, email: "[email protected]", encrypted_password: "$2a$11$0sLfqvfFDsebcmcQTUXzlOuqNIooL5z8niXeza8OUwNK3gZY/iRum", reset_password_token: nil, reset_password_sent_at: nil, remember_created_at: nil, sign_in_count: 0, current_sign_in_at: nil, last_sign_in_at: nil, current_sign_in_ip: nil, last_sign_in_ip: nil, created_at: Fri, 07 Oct 2016 07:41:51 UTC +00:00, updated_at: Fri, 07 Oct 2016 07:41:51 UTC +00:00, username: nil, invitation_token: "658da470d5fcbb2275f30bc1fb66f5771b889cec2f1e56f536319d2fd1ef4a92", invitation_created_at: Fri, 07 Oct 2016 07:41:51 UTC +00:00, invitation_sent_at: Fri, 07 Oct 2016 07:41:51 UTC +00:00, invitation_accepted_at: nil, invitation_limit: nil, invited_by_id: nil, invited_by_type: nil, invitations_count: 0> [3] pry(main)>
यह योजना के अनुसार काम किया।
आप नहीं चाहते कि हमारे उपयोगकर्ता कमांड लाइन के माध्यम से निमंत्रण भेजें, इसलिए यह महत्वपूर्ण है कि हम डेविस इनविटेबल को फ्रंट एंड पर काम करने के लिए सेट करें। ऐसा करना बहुत आसान है; DeviseInvitable के लिए विचार उत्पन्न करने के लिए जनरेटर कमांड चलाएँ।
rails generate devise_invitable:views users
आपको अपने आवेदन में कहीं न कहीं एक लिंक भी जोड़ना होगा जो आमंत्रण भेजने के लिए पृष्ठ की ओर इशारा करता है (app/views/users/invitations/new.html.erb
)।
इस एप्लिकेशन के लिए, आप आगे बढ़ सकते हैं और अपनी नेविगेशन फ़ाइल में लिंक जोड़ सकते हैं। यहां बताया गया है कि मैंने अपना कैसे किया:
#app/views/shared/_navigation.html.erb <nav class="navbar navbar-inverse"> <div class="container"> <div class="navbar-header"> <%= link_to 'Tutsplus Devise', root_path, class: 'navbar-brand' %> </div> <div id="navbar"> <ul class="nav navbar-nav"> <li><%= link_to 'Home', root_path %></li> </ul> <ul class="nav navbar-nav pull-right"> <% if user_signed_in? %> <li class="dropdown"> <a class="dropdown-toggle" data-toggle="dropdown" href="#"> <%= current_user.username %> <span class="caret"></span> </a> <ul class="dropdown-menu" role="menu"> <li><%= link_to 'Invite', new_user_invitation_path %></li> <li><%= link_to 'Profile', edit_user_registration_path %></li> <li><%= link_to 'Log out', destroy_user_session_path, method: :delete %></li> </ul> </li> <% else %> <li><%= link_to 'Log In', new_user_session_path %></li> <li><%= link_to 'Sign Up', new_user_registration_path %></li> <% end %> </ul> </div> </div> </nav>
DeviseInvitable द्वारा उपलब्ध कराए गए मार्गों को देखने के लिए rake routes | invit
. यहाँ आउटपुट कैसा दिखेगा।
cancel_user_registration GET /users/cancel(.:format) devise_invitable/registrations#cancel user_registration POST /users(.:format) devise_invitable/registrations#create new_user_registration GET /users/sign_up(.:format) devise_invitable/registrations#new edit_user_registration GET /users/edit(.:format) devise_invitable/registrations#edit PATCH /users(.:format) devise_invitable/registrations#update PUT /users(.:format) devise_invitable/registrations#update DELETE /users(.:format) devise_invitable/registrations#destroy accept_user_invitation GET /users/invitation/accept(.:format) devise/invitations#edit remove_user_invitation GET /users/invitation/remove(.:format) devise/invitations#destroy user_invitation POST /users/invitation(.:format) devise/invitations#create new_user_invitation GET /users/invitation/new(.:format) devise/invitations#new PATCH /users/invitation(.:format) devise/invitations#update PUT /users/invitation(.:format) devise/invitations#update
आइए देखें कि इस समय हमारे पास क्या है। अपना सर्वर शुरू करने के लिए कमांड चलाएँ; rails server
।
अपने ब्राउज़र को https://localhost:3000/users/invitation/new
पर इंगित करें . दिखाए गए फॉर्म में एक ईमेल पता दर्ज करें, और बटन पर क्लिक करें। यह काम करना चाहिए! यदि आप अपने सर्वर के लॉग में जाते हैं, तो आपको एक आउटपुट देखना चाहिए जो आपके द्वारा आमंत्रण भेजे जाने पर बनाया गया था। आउटपुट में, आपको आमंत्रण स्वीकार करने के लिए एक लिंक दिखाई देगा।
आप मेरी इस बात से सहमत होंगे कि बेहतर होगा कि आप अपने ब्राउज़र में भेजे गए ईमेल को देख सकें। आइए देखें कि यह काम कैसे करना है।
एकीकृत पत्र_ओपनर
लेटर ओपनर आपको अपने डिफ़ॉल्ट ब्राउज़र में ईमेल का पूर्वावलोकन करने की अनुमति देता है। इसके साथ, आपको विकास परिवेश में काम करते हुए मेल वितरण प्रणाली स्थापित करने की आवश्यकता नहीं है।
अपना Gemfile खोलें और नीचे दिए गए रत्न को जोड़ें:
gem 'letter_opener'
bundle install
Run चलाएं ।
अपने टेक्स्ट एडिटर का उपयोग करते हुए, config/environments/development.rb
पर नेविगेट करें और नीचे पंक्ति जोड़ें।
#config/environments/development.rb ... config.action_mailer.delivery_method = :letter_opener end
अपने रेल सर्वर को पुनरारंभ करें। अब अपने ब्राउज़र को https://localhost:3000/users/invitation/new
पर इंगित करें . प्रदर्शित फॉर्म को भरें और जमा करें। इस बार, एक नया पेज पॉप अप होता है जिसमें आमंत्रण ईमेल होता है।
डिफ़ॉल्ट साइन इन और साइन आउट रूट बदलें
डिफ़ॉल्ट रूप से, sign_in
और sign_out
डेविस का उपयोग करते समय मार्ग इस तरह दिखते हैं:
sign_in:
https://localhost:3000/users/sign_in
sign_out:
https://localhost:3000/users/sign_out
इसे बदलने के लिए, config/routes.rb
पर जाएं और निम्नलिखित जोड़ें:
#config/routes.rb as :user do get 'signin' => 'devise/sessions#new' post 'signin' => 'devise/sessions#create' delete 'signout' => 'devise/sessions#destroy' end
आप अपने ब्राउज़र को https://localhost:3000/signin
. पर इंगित कर सकते हैं ।
निष्कर्ष
अब आप जानते हैं कि DeviseInvitable का उपयोग कैसे करें। आपने रत्न के बारे में भी सीखा letter_opener
. डेविस के साथ आप बहुत सी चीजें कर सकते हैं, इसलिए अधिक जानने के लिए विकी देखें। मेरे साथ रहने के लिए धन्यवाद।