Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> Ruby

वसीयत की खोज, भाग 2

परिचय

ट्यूटोरियल के पहले भाग में, हमने सीखा कि डेविस को कैसे स्थापित करें और इसे अपने रेल एप्लिकेशन में कैसे सेट करें। इस भाग में, हम देखेंगे कि कैसे 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 => "johndoe@example.com")

यह उस आउटपुट का उत्पादन करना चाहिए जो मेरे पास नीचे जैसा दिखता है, हालांकि इसमें अंतर होगा।

[2] pry(main)> User Load (78.3ms)  SELECT  "users".* FROM "users" WHERE "users"."email" = ?  ORDER BY "users"."id" ASC LIMIT 1  [["email", "johndoe@example.com"]]
  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", "johndoe@example.com"], ["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 johndoe@example.com (74.3ms)
Date: Fri, 07 Oct 2016 08:41:51 +0100
From: please-change-me-at-config-initializers-devise@example.com
Reply-To: please-change-me-at-config-initializers-devise@example.com
To: johndoe@example.com
Message-ID: <57f751bfce8d6_18022ac6c272b12840661@kinsomicrote-X553MA.mail>
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 johndoe@example.com

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 johndoe@example.com</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: "johndoe@example.com",
 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 . डेविस के साथ आप बहुत सी चीजें कर सकते हैं, इसलिए अधिक जानने के लिए विकी देखें। मेरे साथ रहने के लिए धन्यवाद।


  1. PostgreSQL प्रशासन, भाग 1

    यह पोस्ट PostgreSQL का परिचय देता है और आपको Linux® पर संस्करण 9.3 की स्थापना और कॉन्फ़िगरेशन के बारे में बताता है। परिचय PostgreSQL दुनिया का सबसे उन्नत ओपन-सोर्स रिलेशनल डेटाबेस मैनेजमेंट सिस्टम (RDBMS) है। कई प्रमुख संगठन, जैसे कि Apple, IMDB, Skype, Uber, Lockheed Martin, Verizon, और अन्य, Post

  1. रूबी इंटर्नल्स:रूबी ऑब्जेक्ट्स के मेमोरी लेआउट को एक्सप्लोर करना

    क्या आप रूबी इंटर्नल का एक त्वरित दौरा चाहेंगे? फिर आप एक दावत के लिए तैयार हैं। क्योंकि … हम एक साथ यह पता लगाने जा रहे हैं कि रूबी ऑब्जेक्ट को मेमोरी में कैसे रखा जाता है और आप कुछ अच्छी चीजें करने के लिए आंतरिक डेटा संरचनाओं में कैसे हेरफेर कर सकते हैं। अपनी सीट बेल्ट बांधें और रूबी दुभाषिया

  1. एमआरआई स्रोत कोड की खोज

    यदि आप कुछ समय से रूबी का उपयोग कर रहे हैं तो आप इस बारे में उत्सुक हो सकते हैं कि कुछ चीजें हुड के नीचे कैसे काम करती हैं। रूबी आंतरिक में गहरी खुदाई करने का एक तरीका स्रोत कोड को पढ़ना है जो इसे काम करता है। अगर आप सी को नहीं जानते हैं, तब भी आप कुछ दिलचस्प चीजें सीख सकते हैं। रूबी के लिए जीथब र