質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Devise

Deviseとは、Ruby-on-Railsの認証機能を追加するプラグインです。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

OAuth 2.0

OAuth 2.0(Open Authorization 2.0)は、APIを通して保護されたリソース(サードパーティのアプリケーション)へアクセスする為のオープンプロトコルです。

Slack

Slackは、Tiny Speckという企業からリリースされたコミュニケーションツールです。GoogleDriveやGitHubなど、さまざまな外部サービスと連携することができます。

Q&A

0回答

384閲覧

Devise+Omnioauthを使用したアカウント登録で画像が登録できない

iwonder

総合スコア5

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Devise

Deviseとは、Ruby-on-Railsの認証機能を追加するプラグインです。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

OAuth 2.0

OAuth 2.0(Open Authorization 2.0)は、APIを通して保護されたリソース(サードパーティのアプリケーション)へアクセスする為のオープンプロトコルです。

Slack

Slackは、Tiny Speckという企業からリリースされたコミュニケーションツールです。GoogleDriveやGitHubなど、さまざまな外部サービスと連携することができます。

0グッド

0クリップ

投稿2019/11/05 14:33

前提・実現したいこと

現在Ruby on Railsで開発をしているフレームワーク初心者です。
Ruby on RailsでDevise + omniauth-slackを使ってoauth認証でアカウント登録、ログインができる機能を作リました。Slackのユーザーネームと画像をそのままアカウントの情報として登録がしたいです。
画像のアップロードにcarrierwaveを使っています。設定はデフォルトのままです。

発生している問題・エラーメッセージ

コールバック時の処理でユーザーネームと画像を送られてきたデータの中から取り出しアカウント登録をしているのですが、画像のURlのみDBに入ってくれません。コールバック時ではエラーはなく、その後もアカウントが登録ができてしまっている状況です。

該当のソースコード

Ruby

1#deviseのモデル 2class User < ApplicationRecord 3 # Include default devise modules. Others available are: 4 # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable 5 devise :database_authenticatable, :registerable, 6 :recoverable, :rememberable, :validatable, 7 :omniauthable 8 9 acts_as_taggable 10 has_many :requests 11 mount_uploader :image, ImageUploader 12 13 def self.find_for_oauth(auth) 14 user = User.where(uid: auth.uid, provider: auth.provider).first 15 unless user 16 user = User.create( 17 name: auth.extra.user_info.user.profile["real_name_normalized"], 18 image: auth.extra.user_info.user.profile["image_original"], 19 uid: auth.uid, 20 provider: auth.provider, 21 email: User.dummy_email(auth), 22 password: Devise.friendly_token[0, 20] 23 ) 24 end 25 26 user 27 end 28 29 private 30 31 def self.dummy_email(auth) 32 "#{auth.uid}-#{auth.provider}@example.com" 33 end 34

Ruby

1#コールバック時のコントローラ 2class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController 3 def slack 4 callback_from :slack 5 end 6 7 private 8 9 def after_sign_in_path_for(resource) 10 root_path 11 end 12 13 def callback_from(provider) 14 provider = provider.to_s 15 @user = User.find_for_oauth(request.env['omniauth.auth']) 16 17 if @user.persisted? 18 flash[:notice] = I18n.t('devise.omniauth_callbacks.success', kind: provider.capitalize) 19 sign_in_and_redirect @user, event: :authentication 20 else 21 session["devise.#{provider}_data"] = request.env['omniauth.auth'] 22 redirect_to new_user_registration_url 23 end 24 end 25end

試したこと

deviseだけでアカウント登録をしてみましたがちゃんとカラムに画像のURlが保存されました。

補足情報(FW/ツールのバージョンなど)

Ruby on Rails 5.2.2.1
Mysql

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問