기존 PJ에 devise confirmable 구현 (Ruby on Rails)

10924 단어 루비Railsdevise

Ruby on Rails 기존 PJ에 devise confirmable 구현


  • Rails:5.0.2
  • ruby:2.4.0
  • 이미 devise가 구현되어 있는 rails의 PJ에서 devise의 confirmable를 유효하게 한다.
  • PJ에서는 사용자 테이블이 이미 존재한다. confirmable 용 컬럼은 존재하지 않습니다.
  • 위의 상태에서 confirmable 기능을 사용하여 사용자가 처음 로그인 할 때까지
  • 이번은 아래의 기사를 참고로 했습니다.
    ぃ tp // 이 m / 시가 ぇ s / s ms / f4274088f20832252374

  • 구현 상태 확인



    상기의 기사를 참고로 실장 상황의 확인을 실시한다.
  • gem 'devise'는 설치되었습니다
  • rails g devise : install 할 때 표시되는 항목 확인

  • 1: default url

    environments/developments.rb
    config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
    

    config/routes.rb
    root to: 'home#index'
    

    → 이대로 했습니다.

    2: Deivise View 파일 생성
    →Devise용 View 파일은 생성되지 않았기 때문에 이 타이밍에 작성했습니다.
    Expected string default value for '--jbuilder'; got true (boolean)
    Expected boolean default value for '--markerb'; got :erb (string)
          invoke  Devise::Generators::SharedViewsGenerator
          create    app/views/devise/shared
          create    app/views/devise/shared/_links.html.erb
          invoke  form_for
          create    app/views/devise/confirmations
          create    app/views/devise/confirmations/new.html.erb
          create    app/views/devise/passwords
          create    app/views/devise/passwords/edit.html.erb
          create    app/views/devise/passwords/new.html.erb
          create    app/views/devise/registrations
          create    app/views/devise/registrations/edit.html.erb
          create    app/views/devise/registrations/new.html.erb
          create    app/views/devise/sessions
          create    app/views/devise/sessions/new.html.erb
          create    app/views/devise/unlocks
          create    app/views/devise/unlocks/new.html.erb
          invoke  erb
          create    app/views/devise/mailer
          create    app/views/devise/mailer/confirmation_instructions.html.erb
          create    app/views/devise/mailer/password_change.html.erb
          create    app/views/devise/mailer/reset_password_instructions.html.erb
          create    app/views/devise/mailer/unlock_instructions.html.erb
    

    3:flash 메시지의 설정은 이 타이밍에서는 스루 했습니다.
    4:Rails3.2에 대한 설정은 필요하지 않았습니다.

    기존 사용자 테이블에 confirmable에 대한 열 추가



    이번 프로젝트에서는, ridgepole에서의 DB 관리를 실시하고 있기 때문에 거기에 적합한 수법으로 컬럼 추가를 실시했습니다.
    ぃふぇ. 코오 k 파 d. 코m/엔트리/2014/08/28/194147
  • 컬럼 추가 처리(비망)

  • 예를 들어, user table에 하나의 컬럼을 추가할 때 DB(이 PJ에서는 MySQL) 측에서 컬럼을 추가합니다.
    ALTER TABLE tbl_name ADD [COLUMN] column_definition;
    

    DB 측에서 컬럼 추가가 완료되면 다음 rake 작업을 수행합니다.
    bundle exec rake ridgepole:export
    성공한다고 한 것 같은 느낌이 된다.

    confirmable용의 컬럼으로서 하기를 추가.
    t.string   "confirmation_token"
    t.datetime "confirmed_at"
    t.datetime "confirmation_sent_at"
    t.string   "unconfirmed_email"
    

    rails s와 http://localhost:3000/users/sign_in 에 오류
    undefined method `new_confirmation_path' for #<#<Class:0x007f108477ee08>:0x007f108c420308>
    Did you mean?  new_user_confirmation_path
                   user_confirmation_path
    

    여기는 new_user_confirmation_path 로 수정하여 화면이 정상적으로 표시되었습니다.
    수정 후의 화면은 아래와 같이 되었습니다.



    계정 등록 이메일 보내기


  • 메일 보내기 설정

  • gmail의 설정, 송신용 메일을 설정합니다.
    기본적으로 참고 문서 ぃ tp // 이 m / shiga ぇ s / s / ms / 73d7bd7 e c59 a 001-cd74
    의 거리입니다만, 일부 다른 곳이 있었습니다.

    config/initializers/devise.rb
    Devise.setup do |config|
     ~省略~
      # ==> Mailer Configuration
      # Configure the e-mail address which will be shown in Devise::Mailer,
      # note that it will be overwritten if you use your own mailer class
      # with default "from" parameter.
      config.mailer_sender = '認証メールの送信元のメールアドレス'
    end
    

    config/environmetns/developments.rb
      config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
      # mail setting
      config.action_mailer.raise_delivery_errors = true
      config.action_mailer.delivery_method = :smtp
      config.action_mailer.smtp_settings = {
        :enable_starttls_auto => true,
        :address => "smtp.gmail.com",
        :port => 587,
        :domain => 'smtp.gmail.com',
        :user_name => "[email protected]", #gmailアドレス
        :password => "password", #gmailパスワード
        :authentication => 'login',
      }
    

    Sign Up하면 오류가 발생했습니다. 아래 로그
    Started POST "/users" for 127.0.0.1 at 2017-07-15 00:52:53 +0900
    Processing by Devise::RegistrationsController#create as HTML
      Parameters: {"utf8"=>"✓", "authenticity_token"=>"Cu1CQIG9vGl2nChHvYoZh3D+uNLgKMVgWuNRDUOGCP5xUFHwOZu/cvcD9lrUHyd1JOAdkjBcGnoJZUT+1VCfpw==", "user"=>{"email"=>"[email protected]", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}, "commit"=>"Sign up"}
      [1m[35m (0.4ms)[0m  [1m[35mBEGIN[0m
      [1m[36mUser Exists (0.8ms)[0m  [1m[34mSELECT  1 AS one FROM `users` WHERE `users`.`email` = BINARY '[email protected]' LIMIT 1[0m
      [1m[35m (0.3ms)[0m  [1m[31mROLLBACK[0m
    Completed 500 Internal Server Error in 244ms (ActiveRecord: 1.5ms)
    
    
    
    NameError (undefined local variable or method `confirmed_at' for #<User:0x007f108c896298>
    Did you mean?  confirmed?):
    

    몇가지 에러 ​​메시지로부터 검색해 보았지만, 원인을 모르고… 일단 방치해 다음날 시험해 보면 잘 된다. 그 때의 로그는 아래.
    Started POST "/users" for 127.0.0.1 at 2017-07-16 14:37:38 +0900
    Processing by Devise::RegistrationsController#create as HTML
      Parameters: {"utf8"=>"✓", "authenticity_token"=>"bj+knqhJcxtaKTddaWc75z9JgFiJLWn6qwhgJcolQLsVgrcuEG9wANu26UAA8gUVa1clGFlZtuD4jnXWXPPX4g==", "user"=>{"email"=>"[email protected]", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}, "commit"=>"Sign up"}
      [1m[35m (0.4ms)[0m  [1m[35mBEGIN[0m
      [1m[36mUser Exists (4.9ms)[0m  [1m[34mSELECT  1 AS one FROM `users` WHERE `users`.`email` = BINARY '[email protected]' LIMIT 1[0m
      [1m[35mSQL (9.2ms)[0m  [1m[32mINSERT INTO `users` (`email`, `encrypted_password`, `created_at`, `updated_at`, `confirmation_token`, `confirmation_sent_at`) VALUES ('[email protected]', '$2a$11$yiWrcbLuo0tDRfAq6nHZyumDu.d1tHxpRpj3JOufTxFumJKQInqnS', '2017-07-16 05:37:39', '2017-07-16 05:37:39', '2GHvUrpN-z44ENx_prW5', '2017-07-16 05:37:39')[0m
      [1m[35m (11.1ms)[0m  [1m[35mCOMMIT[0m
      Rendering devise/mailer/confirmation_instructions.html.erb
      Rendered devise/mailer/confirmation_instructions.html.erb (1.6ms)
    Devise::Mailer#confirmation_instructions: processed outbound mail in 1637.4ms
    Sent mail to [email protected] (5299.1ms)
    Date: Sun, 16 Jul 2017 14:37:45 +0900
    From: [email protected]
    Reply-To: [email protected]
    To: [email protected]
    Message-ID: <[email protected]>
    Subject: Confirmation instructions
    Mime-Version: 1.0
    Content-Type: text/html;
     charset=UTF-8
    Content-Transfer-Encoding: 7bit
    
    <p>Welcome [email protected]!</p>
    
    <p>You can confirm your account email through the link below:</p>
    
    <p><a href="http://localhost:3000/users/confirmation?confirmation_token=2GHvUrpN-z44ENx_prW5">Confirm my account</a></p>
    

    이것으로 등록 메일을 보내 인증하고 로그인하는 곳까지의 설정이 완료되었습니다.
    (재부팅이 필요했던 것 같습니다 → 출처)

    이번 기사는 여기까지입니다.

    좋은 웹페이지 즐겨찾기