現在、Railsアプリケーションで、deviseとomniauth-twitterを用いたユーザのTwitterによる新規登録・ログイン機能を実装しています。
ユーザ画像の保存はActiveStorageとS3を利用しています。
ユーザ編集時には画像データをattachすることができるのですが、oauthから新規登録しようとするときのattachがうまく行かず詰まっています。
具体的なコードは以下です。
userrb
1 def self.find_for_oauth(auth) 2 user = User.where(uid: auth.uid, provider: auth.provider).first 3 4 user ||= User.create( 5 uid: auth.uid, 6 provider: auth.provider, 7 name: auth.info.name, 8 profile: set_profile(auth), 9 email: set_email(auth), 10 password: Devise.friendly_token[0, 20] 11 ) 12 user.image.attach(auth.info.image) 13 user 14 end 15 16 class << self 17 private 18 19 def set_email(auth) 20 auth.info.email || "#{auth.uid}-#{auth.provider}@example.com" 21 end 22 23 def set_profile(auth) 24 auth.info.description 25 end 26 end
ここでのuser.image.attach(auth.info.image)の部分が、attachをしようとしてうまく行かずに詰まっている部分です。
applicationcontroller
1# frozen_string_literal: true 2 3class ApplicationController < ActionController::Base 4 before_action :configure_permitted_parameters, if: :devise_controller? 5 6 def after_sign_in_path_for(resource) 7 user_path(resource) 8 end 9 10 def after_sign_out_path_for(_resource) 11 root_path 12 end 13 14 def configure_permitted_parameters 15 devise_parameter_sanitizer.permit(:sign_up, keys: [:name]) 16 devise_parameter_sanitizer.permit(:account_update, keys: %i[name profile image]) 17 end 18 19 def search_param 20 params.permit(:search) 21 end 22end 23
わかる方がいらっしゃれば、教えていただけるとありがたいです。
あなたの回答
tips
プレビュー