3

これは奇妙な質問かもしれませんが、私が最近取り組んでいるプロジェクトで出てきました。

一意の :sid パラメータを持つ Student という Devise モデルがあります。データベースの Student テーブルには、:sid 値のみが設定された Student オブジェクトが既に格納されています。生徒が :sid を使用して登録できるようにし、Student オブジェクトの他の属性を設定し、必要な Devise セットアップを行う必要があります。

世界でどのように登録を設定すればよいですか? 現在、次のコードでカスタム Devise RegistrationController を使用しています。

# inside controllers/students/registration_controller.rb
def create
    if Student.exists?(:sid => params[:student][:sid].to_i)
        @student = Student.find_by_sid(params[:student][:sid].to_i)
        @student.update_attributes(params[:student])
        if @student.save
            set_flash_message :notice, :signed_up if is_navigational_format?
            sign_in(Student, @student)
        else
            set_flash_message :notice, :sign_up_failed
            redirect_to student_registration_path
        end
    else
        set_flash_message :error, :sid_not_found
        redirect_to new_student_registration_path
    end
end

このコードは、既存の Student オブジェクトを更新するだけです。

有効な :sid のリストを別の場所に保存する方が理にかなっているのか、それともこれを機能させるために何か他のことをする必要があるのか​​ どうかはわかりません。

編集:私の主な質問に関しては、これが、任意の値を使用して選択された既存のユーザー オブジェクトのプールからの登録のみを許可する最善の方法であるかどうか疑問に思っています。

4

1 に答える 1

2

私があなたの質問を正しく理解しているなら、あなたは特定のトークンを持っている人だけがサイトに登録して彼らの情報を記入できるようにしたいのです。これを実行したい場合は、トークン値(たとえば、6文字:18ui7p)を生成し、これらを別のテーブルに格納することでこれを実現できます。誰かを登録する場合は、有効なトークンを含むURLを送信します。

http://example.com/users/sign_up?token=18ui7p

また、登録コントローラーでメソッドをオーバーライドnewして、有効なトークン(以前に生成してデータベースに保存したもの)を持つユーザーのみがユーザーとして登録できるようにします。これは、createアクションでも同じです。削除することも忘れないでください。使用後にトークンにマークを付けます。

このようにして、誰か(学校の管理者など)がシステムに新しい人を追加したい場合、トークンを生成して生徒にメールで送信できます。つまり、トークンを生成してメールに送信するアクションを提供します。もちろん、これには管理者だけがアクセスできます。

私はちょうどあなたが望むことをすることができるdevise_invitableと呼ばれる宝石を見つけました、しかしあなたはただあなた自身で解決策を実行することができました。

于 2012-11-25T19:35:50.097 に答える