Exploring Devise, Del 2

Introduksjon

I den første delen av opplæringen lærte vi å installere Devise og sette den opp i vår Rails-applikasjon. I denne delen vil vi se på hvordan du integrerer DeviseInvitable.

DeviseInvitable er en utvidelse som fungerer med Devise. Med DeviseInvitable i søknaden din, kan brukerne invitere sine venner via e-post. Dette er en flott funksjon å inkludere i din søknad hvis du bygger et samarbeidsprogram.

Konfigurer DeviseInvitable

Åpne din Gemfile og legg til perlen:

# Gemfile ... perle 'devise_invitable'

Kjør kommandoen for å installere bunt installasjon.

Kjør generatorkommandoen for å legge til DeviseInvitables konfigurasjonsalternativ i Devise-konfigurasjonsfilen.

skinner genererer devise_invitable: installere

Du kan se de nye endringene ved å sjekke ut konfig / initializers / devise.rb med teksteditoren din.

Deretter la vi legge til DeviseInvitable til vår Bruker modell.

skinner genererer devise_invitable Bruker 

Dette vil legge til : invitable flagg til din modell, slik at brukermodellen din vil se slik ut:

# app / models / user.rb klasse bruker < ActiveRecord::Base # Include default devise modules. Others available are: # :confirmable, :lockable, :timeoutable and :omniauthable devise :invitable, :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable end

Kjører kommandoen ovenfor genererte også en migreringsfil som ser ut som jeg har under:

klasse 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

Overfør nå databasen din ved å kjøre rake db: migrere.

Konfigurere Controller for DeviseInvitable

DeviseInvitable kreves for å passere noen parametere når du sender en invitasjon. For at dette skal fungere, må vi hviteliste den nødvendige parameteren som skal brukes. Bruk tekstredigeringsprogrammet til å navigere til app / kontrollere / application_controller.rb og få din til å se ut som jeg har under:

# app / controllers / application_controller.rb klasse 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

Fra det ovenstående kan du se det : e-post  har blitt hvitlistet for DeviseInvitable.

La oss nå se hva vi har via konsollen vår. På terminalen din, løp skinner konsoll og skriv inn hva du har under.

[1] pry (main)> User.invite! (: Email => "[email protected]")

Det skal produsere produksjonen som ser ut som det jeg har under, selv om det vil være forskjeller.

[2] pry (main)> Bruker Load (78.3ms) SELECT "brukere". * FRA "brukere" hvor "brukere". "Email" =? ORDER BY "users". "ID" ASC LIMIT 1 [["email", "[email protected]"]] Brukerlast (0.2ms) SELECT "brukere". * FRA "brukere" WHERE "brukere". "Invitation_token "=? BESTILL BY "brukere". "Id" ASC LIMIT 1 [["invitation_token", "658da470d5fcbb2275f30bc1fb66f5771b889cec2f1e56f536319d2fd1ef4a92"]] (0.1ms) start transaksjon SQL (67.8ms) INSERT TIL "brukere" ("email", "encrypted_password", "invitation_token "," invitation_created_at "," invitation_sent_at "," created_at "," updated_at ") VÆRDIER (?,?,?,?,?,?,?) [[" 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,5 ms) begå transaksjon 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/li b / 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: behandlet utgående mail i 247.1ms Sendt post til [email protected] (74.3ms) Dato: fre, 07 okt 2016 08:41:51 +0100 Fra: [email protected] Svar-til: vennligst bytt [email protected] Til: [email protected] Meldings-ID: <[email protected]> Emne: Invitasjonsinstruksjoner Mime-Versjon: 1.0 Content-Type: Multipart / Alternative; boundary = "- == _ mimepart_57f751bfcc725_18022ac6c272b12840524"; charset = UTF-8 Content-Transfer-Encoding: 7bit ---- == _ mimepart_57f751bfcc725_18022ac6c272b12840524 Innholdstype: tekst / vanlig; charset = UTF-8 Content-Transfer-Encoding: 7bit Hei [email protected] Noen har invitert deg til http: // localhost: 3000 /, du kan godta det via linken under. http: // localhost: 3000 / users / invitation / accept? invitation_token = xmW9uRfyafptmeFMmFBy Hvis du ikke vil godta invitasjonen, kan du ignorere denne e-postadressen. Kontoen din blir ikke opprettet før du får tilgang til lenken ovenfor og angir passordet ditt. ---- == _ mimepart_57f751bfcc725_18022ac6c272b12840524 Innholdstype: tekst / html; charset = UTF-8 Content-Transfer-Encoding: 7bit 

Hei [email protected]

Noen har invitert deg til http: // localhost: 3000 /, du kan godta det via linken under.

Godta invitasjon

Hvis du ikke vil godta invitasjonen, kan du ignorere denne e-posten.
Kontoen din blir ikke opprettet før du får tilgang til lenken ovenfor og angir passordet ditt.

----== _ mimepart_57f751bfcc725_18022ac6c272b12840524-- => # [3] pry (hoved)>

Det fungerte som planlagt.

Du vil ikke at brukerne våre skal sende invitasjoner via kommandolinjen, så det er viktig at vi konfigurerer DeviseInvitable for å arbeide på forsiden. Å gjøre dette er veldig enkelt; Kjør generatoren kommandoen for å generere visningene for DeviseInvitable.

skinner genererer devise_invitable: viser brukere

Du må også legge til en kobling et sted i søknaden din som peker til siden for å sende invitasjoner (app / visninger / brukere / invitasjoner / new.html.erb).

For dette programmet kan du gå videre og legge til linken til navigasjonsfilen din. Slik har jeg gjort min:

# App / visninger / delt / _navigation.html.erb 

For å se ruter som er tilgjengelig av DeviseInvitable, kjør kommandoen rake ruter | Invit. Her ser utgangen ut.

cancel_user_registration GET /users/cancel(.:format) devise_invitable / registrations # avbryt 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 # ødelegge accept_user_invitation GET /users/invitation/accept(.:format) devise / invitasjoner # edit remove_user_invitation GET /users/invitation/remove(.:format) devise / invitasjoner # ødelegge user_invitation POST /users/invitation(.:format) devise / invitasjoner # opprett new_user_invitation GET /users/invitation/new(.:format) devise / invitasjoner # nye PATCH /users/invitation(.:format) devise / invitasjoner # oppdatering PUT /users/invitation(.:format) devise / invitasjoner # Oppdater

La oss se hva vi har i øyeblikket. Kjør kommandoen for å starte serveren din; skinner server.

Pek nettleseren din til http: // localhost: 3000 / brukere / invitasjon / new. Skriv inn en e-postadresse i skjemaet som vises, og klikk på knappen. Det burde fungere! Hvis du går til loggene på serveren din, bør du se en utgang som ble opprettet da du sendte invitasjonen. I utgangen vil du se en lenke for å godta invitasjonen.

Du vil være enig med meg i at det blir bedre hvis du kan se e-posten som er sendt i nettleseren din. La oss se hvordan du gjør det arbeidet.

Integrerer Letter_Opener

Letter Opener lar deg forhåndsvise e-postmeldinger i standard nettleseren din. Med det trenger du ikke å sette opp et postleveringssystem mens du arbeider i utviklingsmiljøet.

Åpne Gemfile og legg til perlen nedenfor:

perle 'letter_opener'

Løpe bunt installasjon.

Bruk tekstredigeringsprogrammet til å navigere til konfig / miljøer / development.rb og legg til linjen nedenfor.

# config / environments / development.rb ... config.action_mailer.delivery_method =: letter_opener end

Start datamaskinen på nytt. Nå peker nettleseren til http: // localhost: 3000 / brukere / invitasjon / new. Fyll og send skjemaet som vises. Denne gangen dukker opp en ny side som inneholder invitasjonsmailen.

Endre standard logg inn og logg ut ruter

Som standard er Logg inn og Logg ut ruter når du bruker Devise ser slik ut:

Logg inn: http: // localhost: 3000 / brukere / sign_in

Logg ut: http: // localhost: 3000 / brukere / sign_out

For å endre det, gå til config / routes.rb og legg til følgende:

# config / routes.rb som: brukeren får 'signin' => 'utarbeide / økter # nytt' innlegg 'signin' => 'utarbeide / økter # skape' slett 'signout' => 'utarbeide / økter # ødelegge' ende

Du kan peke nettleseren din til http: // localhost: 3000 / pålogging.

Konklusjon

Nå vet du hvordan du skal bruke DeviseInvitable. Du lærte også om perlen Brevåpner. Det er mange ting du kan gjøre med Devise, så sjekk ut Wiki for å lære mer. Takk for at du bodde hos meg.