###実現したいこと・現状
作成したDevise+OmniAuthでの認証にnameと、ユニーク制約を与えたusernameを持たせたいのですが(イメージとしてはGitHub,Twitterの様に名前を2つ持てる)、モデル設計をどうすれば良いのかアドバイスをお願いします。
現在構築した認証機能は以下の通りです。
①Deviseでのname(unique制約は与えていない), email, password認証。
②Google or Twitter or GitHubで認証。ログイン後に複数プロバイダとの接続可。
Userモデル rails g devise User rails g migration add_name_to_users name:string Identityモデル rails g model Identity user:references provider:string uid:string
###解決策
①UniqueNameモデルを作成する。
②Userモデルにusernameを追加する。これだとusernameを取られていた場合、ユーザー登録出来ずvalidation errorになりました。なので、usernameにランダムな文字列を投入し、finish_signupにてユーザーに入力させる。
③save(validate: false)を使う。
class User < ActiveRecord::Base TEMP_EMAIL_PREFIX = 'change@me' TEMP_EMAIL_REGEX = /\Achange@me/ ・・・ name: auth.info.name, email: email ? email : "#{TEMP_EMAIL_PREFIX}-#{auth.uid}-#{auth.provider}.com", username: auth.info.nickname, # ②ここをランダムな文字列に?? ・・・
①、②、③どれが良い解決策でしょうか?
回答よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/05/04 01:55