LoginSignup
2
0

More than 5 years have passed since last update.

Wikiをつくる(ユーザーの招待機能について)

Last updated at Posted at 2016-10-26

Wikiを作る(1) - Qiitaの続き

実現したいユーザーの招待方法

  • 登録した人だけがWikiに書き込みができる
  • 1人目(インストールした人)は普通にユーザー登録できる
    • 1人目の登録者は他者を招待するための秘密のURLを参照できるようになる
  • 2人目以降は秘密のURLからのみ登録ができる
  • 秘密のURLは破棄と再作成ができる

その他で検討したこと

  • 1人目について
    • インストールウィザードがあるのが望ましいが大変そうなので見送る
    • usernameとpasswordが決め打ちなのも気持ち悪いので見送る
  • 2人目以降の招待方法について
    • 個別に招待メールを送る方法は嫌だった(scambra/devise_invitable
    • SNSのメッセンジャーなどで通知することを想定している

どうやったか

まず普通にdeviseを使ってユーザー管理の仕組みをつくる。
そして、Rails4でdeviseのControllerをカスタマイズする - Qiitaを参考にしながらUsers::RegistrationsControllernewcreateのアクションにbefore_filterをかけて、そこでトークンがあるかどうかをチェックするようにした。

class Users::RegistrationsController < Devise::RegistrationsController
  before_action :check_registable, only: [:new, :create]

  protected

  def check_registable
    # 1人目のユーザーはトークン不要とした
    return true if User.count == 0

    #TOKEN is valid
    token = params[:rt] || cookies[:rt]
    if token == Option.user_registration_token # ※1
      cookies[:rt] = token #クッキーに保存しておく(Sessionに保存してもいい)
    else
      redirect_to root_path, notice: 'invalid token' 
    end
  end
end

※1Option.user_registration_tokenに保存してある。Optionは設定を保存しているところである。(後で詳細を書くかもしれない)
Tokenは下記のように生成している。

class Option < ApplicationRecord
  def self.update_registration_token
    self.user_registration_token = SecureRandom.uuid.gsub!(/-/,'')
  end

  #省略
end

作った設定画面

image

まとめ

  • 共通の招待URLを使った招待機能が実現できた。
  • Deviseに乗っかることで比較的少ないコードで実現できた。

追記

だいたい作りました
https://github.com/toyoshi/wikigo

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0