差分

Tabetai

6,117 バイト追加, 2023年7月14日 (金) 11:06
DeviseとOmniauthでGoogle、Twitter、Facebook認証
[[category:memo|{{PAGENAME}}]]
== 確認 準備 ==プロジェクトディレクトリ作成 移動  [[rails前バージョン確認|バージョン確認]] [https://help.onamae.com/contact/ お名前.com問い合わせ] == create application == % rails new . --css=tailwind --css=sass --javascript=esbuild --database=postgresql  % bin/bundle add tailwindcss-rails  % bin/rails tailwindcss:install  gem 'devise', '~> 4.9', '>= 4.9.2'  % bundle install  % bin/setup サーバー側 $ bundle install --without test development database.yml username:などを確認する (2箇所) <nowiki># /config/database.yml production: <<: *default database: tabetai_production username: jq password: <%= ENV["TABETAI_DATABASE_PASSWORD"] %></nowiki>  <nowiki># /config/environments/production.rb  config.assets.compile = true  config.action_mailer.raise_delivery_errors = true config.action_mailer.delivery_method = :smtp #host = 'localhost' host = 'http://onk.pokpok.jp' config.action_mailer.default_url_options = { host: host }</nowiki> データベース作成 $ createdb tabetai_production  $ rails db:migrate RAILS_ENV=production == production == % $ DISABLE_DATABASE_ENVIRONMENT_CHECK=1 rails db:drop RAILS_ENV=production  <nowiki>本番環境でbin/devを実行する。 RAILS_ENV環境変数を設定して本番環境を指定。 export RAILS_ENV=production bundleコマンドを使用してGemの依存関係をインストール。 bundle install プリコンパイルされたアセットを生成。 bundle exec rails assets:precompile サーバーを起動。 bundle exec rails server</nowiki> == テスト用のデータで開発用のデータをつくる設定 == <nowiki># db/seeds.rb puts "\n== Seeding the database with fixtures =="system("bin/rails db:fixtures:load")</nowiki> == db:rollback == % rails db:migrate:status  % rails db:rollback  % rails db:rollback STEP=n  % rails db:migrate:down VERSION=************** == gemのアンインストール方法 == <nowiki>$ bundle exec gem uninstall <gem名> Gemfileから該当のgemの行を削除 $ bundle install</nowiki> == user == % bundle exec rails g model User email:string  t.string :email, null: false, index: { unique: true }   % bundle exec rails db:migrate  <nowiki># app/models/user.rb  validates :email, presence: true, uniqueness: true</nowiki> == home ==ホームを作る % rails generate controller Pages home homeコントローラーはパブリックなので、認証をはずす <nowiki># app/controllers/pages_controller.rb  skip_before_action :authenticate_user!</nowiki> ルートパス <nowiki># config/routes.rb root to: "pages#home"</nowiki>  == user devise == % bin/rails generate devise:install  <nowiki>アプリケーションの設定に応じて、いくつかの手動のセットアップが必要です: 1. 環境ファイルでデフォルトのURLオプションを定義してください。以下は、開発環境に適したdefault_url_optionsの例です。config/environments/development.rbに追加します:  config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }  本番環境では、:hostをアプリケーションの実際のホストに設定する必要があります。  * すべてのアプリケーションに必要です。 * 2. config/routes.rbでroot_urlを*何か*に定義してください。例:  root to: "home#index"  * API専用アプリケーションには必要ありません。 * 3. app/views/layouts/application.html.erbにフラッシュメッセージがあることを確認してください。例:  <p class="notice"><%= notice %></p> <p class="alert"><%= alert %></p>  * API専用アプリケーションには必要ありません。 * 4. カスタマイズするために、Deviseビューをアプリケーションにコピーするには、次のコマンドを実行します:  rails g devise:views  * 必須ではありません。 *</nowiki> 1  # config/environments/development.rb <nowiki> host = 'http://koresore.pokpok.jp' config.action_mailer.default_url_options = { host: host }</nowiki> 2  # app/views/layouts/application.html.erb <nowiki><p class="notice"><%= notice %></p> <p class="alert"><%= alert %></p></nowiki> Modelを作成 $ bin/rails generate devise User $ bin/rails db:migrate Viewを作成 $ rails generate devise:views users view更新 <nowiki># config/initializers/devise.rb config.scoped_views = true</nowiki>  ログインしないとアクセスできないようにする <nowiki># app/controllers/application_controller.rb class ApplicationController < ActionController::Base before_action :authenticate_user!, unless: :devise_controller?end</nowiki> == DeviseとOmniauthでGoogle、Twitter、Facebook認証 ==  gem 'dotenv-rails' $ bundle install $ touch .env  <nowiki>HOST='example.jp'TWITTER_API_KEY=TWITTER_API_SECRET=GOOGLE_CLIENT_ID=GOOGLE_CLIENT_SECRET=FACEBOOK_KEY=FACEBOOK_SECRET=</nowiki>  <nowiki>gem 'omniauth-facebook'gem 'omniauth-twitter'gem 'omniauth-google-oauth2'</nowiki> [[oauth|bundle install後のメッセージ]]  $ rails g migration AddOmniauthToUsers provider:string uid:string  <nowiki># config/initializers/devise.rb config.omniauth :facebook, ENV['FACEBOOK_KEY'], ENV['FACEBOOK_SECRET'], scope: 'email', info_fields: 'email', callback_url: "#{ENV['HOST']}/users/auth/facebook/callback" config.omniauth :twitter, ENV['TWITTER_API_KEY'], ENV['TWITTER_API_SECRET'], scope: 'email', oauth_callback: "#{ENV['HOST']}/users/auth/twitter/callback" config.omniauth :google_oauth2, ENV['GOOGLE_CLIENT_ID'], ENV['GOOGLE_CLIENT_SECRET'], scope: 'email', redirect_uri: "#{ENV['HOST']}/users/auth/google_oauth2/callback" OmniAuth.config.logger = Rails.logger if Rails.env.development?</nowiki>  <nowiki>$ mkdir app/controllers/users/$ touch app/controllers/users/omniauth_callbacks_controller.rb</nowiki> == test == ~/tabetai2$ bin/rails generate simple_form:install