Computer >> 컴퓨터 >  >> 프로그램 작성 >> Ruby

탐색 장치, 2부

소개

튜토리얼의 첫 번째 부분에서 우리는 Devise를 설치하고 Rails 애플리케이션에서 설정하는 방법을 배웠습니다. 이 부분에서는 DeviseInvable을 통합하는 방법을 살펴보겠습니다.

DeviseInvable은 Devise와 함께 작동하는 확장 프로그램입니다. 애플리케이션에 DeviseInvable을 사용하면 사용자가 이메일을 통해 친구를 초대할 수 있습니다. 이는 협업 앱을 구축하는 경우 애플리케이션에 포함할 수 있는 훌륭한 기능입니다.

DevisInvable 설정

Gemfile을 엽니다. 보석 추가:

#Gemfile...보석 'devise_invitable'

명령어를 실행하여 bundle install를 설치합니다. .

Generator 명령을 실행하여 DeviseInvable의 구성 옵션을 Devise 구성 파일에 추가합니다.

레일 생성 devise_invable:install

config/initializers/devise.rb를 확인하여 새로운 변경 사항을 확인할 수 있습니다. 텍스트 편집기로

다음으로 User에 DeviseInvable을 추가해 보겠습니다. 모델.

rails는 devise_invitable 사용자를 생성합니다.

그러면 :invitable이 추가됩니다. 플래그를 모델에 추가하면 사용자 모델이 다음과 같이 표시됩니다.

#app/models/user.rbclass 사용자 
 위의 명령을 실행하면 아래와 같은 마이그레이션 파일도 생성됩니다.

클래스 DeviseInvitableAddToUsers  

이제 rake db:migrate를 실행하여 데이터베이스를 마이그레이션하십시오. .

DevisInvable용 컨트롤러 구성

초대를 보낼 때 일부 매개변수를 전달하려면 DeviseInvable이 필요합니다. 이것이 작동하려면 사용될 필수 매개변수를 화이트리스트에 추가해야 합니다. 텍스트 편집기를 사용하여 app/controllers/application_controller.rb로 이동합니다. 아래에 있는 것과 같이 보이게 하십시오.

#app/controllers/application_controller.rbclass ApplicationController  

위에서 :email 을 볼 수 있습니다. DevisInvable에 대해 허용되었습니다.

이제 콘솔을 통해 무엇이 있는지 봅시다. 터미널에서 rails console을 실행합니다. 아래에 있는 것을 입력하십시오.

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

차이가 있지만 아래에 있는 것과 같은 출력을 생성해야 합니다.

[2] pry(main)> 사용자 로드(78.3ms) SELECT "users".* FROM "users" WHERE "users"."email" =? ORDER BY "users"."id" ASC LIMIT 1 [["email", "[email protected]"]] 사용자 로드(0.2ms) SELECT "users".* FROM "users" WHERE "users"."invitation_token " =? ORDER BY "users"."id" ASC LIMIT 1 [["invitation_token", "658da470d5fcbb2275f30bc1fb66f5771b889cec2f1e56f536319d2fd1ef4a92msERT. ", "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.251:70" ] (220.5ms) 커밋 트랜잭션 렌더링 /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) 렌더링됨 /home/kinsomicrote/.rbenv/versi ons/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:아웃바운드 처리됨 mail in 247.1msSent mail to [email protected] (74.3ms)날짜:Fri, 07 Oct 2016 08:41:51 +0100From:please-change-me-at-config-initializers-devise@example.comReply-To:[email protected]:[email protected]:<[email protected]>제목:초대 안내Mime-Version-ContentalType:1.; 경계="--==_mimepart_57f751bfcc725_18022ac6c272b12840524"; charset=UTF-8Content-Transfer-Encoding:7bit----==_mimepart_57f751bfcc725_18022ac6c272b12840524Content-Type:텍스트/일반; charset=UTF-8Content-Transfer-Encoding:7bitHello [email protected]누군가가 https://localhost:3000/에 초대했습니다. 아래 링크를 통해 수락할 수 있습니다.https://localhost:3000/users/invitation/ accept?invitation_token=xmW9uRfyafptmeFMmFBy초대를 수락하지 않으려면 이 이메일을 무시하십시오.위의 링크에 액세스하여 비밀번호를 설정하기 전에는 계정이 생성되지 않습니다.----==_mimepart_57f751bfcc725_18022ac6c272b/Content-Content-token:HTML; charset=UTF-8Content-Transfer-Encoding:7bit

안녕하세요 [email protected]

누군가를 https://localhost:3000/에 초대했습니다. 아래 링크를 통해 수락할 수 있습니다.

초대 수락

원하지 않는 경우 초대를 수락하려면 이 이메일을 무시하십시오.
위 링크에 액세스하여 비밀번호를 설정해야 계정이 생성됩니다.

----==_mimepart_57f751bfcc725_18022ac6c272b12840524--=> #<사용자 :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, 사용자 이름 초대_토큰:"658da470 D5FCBB2275F30BC1FB66F5771B889CEC2F1E56F536319D2FD1EF4A92 ", Invitation_Created_AT :FRI, 07 Oct 2016 07:41:51 UTC +00 :00, NIL _UTITS_AT :NIL _ATITS :NILITS :NILITS :OUCOT_ATITS :FRI, 07:4PERCEPITED_AT :FRI. , 초대된_바이_유형:nil, 초대_수:0>[3] pry(main)>

계획대로 작동했습니다.

사용자가 명령줄을 통해 초대를 보내는 것을 원하지 않으므로 프런트 엔드에서 작동하도록 DeviseInvable을 설정하는 것이 중요합니다. 이렇게 하는 것은 매우 간단합니다. Generator 명령을 실행하여 DeviseInvable에 대한 보기를 생성하십시오.

rails generate devise_invitable:views users

또한 초대를 보내기 위한 페이지를 가리키는 링크를 애플리케이션 어딘가에 추가해야 합니다(app/views/users/invitations/new.html.erb ).

이 응용 프로그램의 경우 탐색 파일에 링크를 추가할 수 있습니다. 제가 한 방법은 다음과 같습니다.

#app/views/shared/_navigation.html.erb

DeviseInvable에서 사용할 수 있는 경로를 보려면 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/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/invitation#destroy user_invitation POST /users/invitation(.:format) ) 고안/초대#cr 먹다 new_user_invitation GET /users/invitation/new(.:format) devise/invitation#new PATCH /users/invitation(.:format) devise/invitation#update PUT /users/invitation(.:format) devise/invitation#update 

우리가 지금 이 순간에 무엇을 가지고 있는지 봅시다. 명령을 실행하여 서버를 시작하십시오. rails server .

브라우저에서 https://localhost:3000/users/invitation/new로 이동합니다. . 표시된 양식에 이메일 주소를 입력하고 버튼을 클릭합니다. 작동해야 합니다! 서버의 로그로 이동하면 초대를 보낼 때 생성된 출력이 표시되어야 합니다. 출력에 초대를 수락할 수 있는 링크가 표시됩니다.

브라우저에서 보낸 이메일을 볼 수 있다면 더 좋을 것이라는 데 동의할 것입니다. 작동하는 방법을 살펴보겠습니다.

Letter_Opener 통합

Letter Opener를 사용하면 기본 브라우저에서 이메일을 미리 볼 수 있습니다. 이를 사용하면 개발 환경에서 작업하는 동안 메일 전달 시스템을 설정할 필요가 없습니다.

Gemfile을 열고 아래에 gem을 추가하세요:

gem 'letter_opener'

bundle install 실행 .

텍스트 편집기를 사용하여 config/environments/development.rb로 이동합니다. 아래 줄을 추가하십시오.

#config/environments/development.rb... config.action_mailer.delivery_method =:letter_openerend

레일스 서버를 다시 시작하십시오. 이제 브라우저에서 https://localhost:3000/users/invitation/new로 이동합니다. . 표시된 양식을 작성하고 제출하십시오. 이번에는 초대 이메일이 포함된 새 페이지가 나타납니다.

기본 로그인 및 로그아웃 경로 변경

기본적으로 sign_insign_out Devise를 사용할 때의 경로는 다음과 같습니다.

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# 파괴' 끝

브라우저에서 https://localhost:3000/signin을 가리키도록 할 수 있습니다. .

결론

이제 DeviseInvable을 사용하는 방법을 알게 되었습니다. 또한 gem letter_opener에 대해서도 배웠습니다. . Devise로 할 수 있는 일이 많이 있으므로 Wiki에서 자세히 알아보세요. 나와 함께 있어줘서 고마워.