46

Deviseを使用してユーザーセッション/登録を管理するユーザーがサインインするたびに、およびデバイスによって接続用のホームページにリダイレクトされる前に、特定のタスク(たとえば、この特定のユーザーのユーザーテーブルの一部のフィールドを更新する)を実行する必要があります。ユーザー。

devise SessionsControllerをオーバーライドする必要がありますか?そうであれば、どのようにオーバーライドしますか?

4

3 に答える 3

71

または、独自のセッションコントローラーを作成することもできます

class SessionsController < Devise::SessionsController
  def new
    super
  end

  def create
    self.resource = warden.authenticate!(auth_options)
    set_flash_message(:notice, :signed_in) if is_navigational_format?
    sign_in(resource_name, resource)
    if !session[:return_to].blank?
      redirect_to session[:return_to]
      session[:return_to] = nil
    else
      respond_with resource, :location => after_sign_in_path_for(resource)
    end
  end
end

そしてroutes.rb追加で:

devise_for :users, controllers: {sessions: "sessions"}
于 2012-12-12T10:39:51.480 に答える
19

Devise はafter_database_authenticationコールバック メソッドを提供します。現在認証されているユーザー オブジェクトに完全にアクセスできます。

ログインが成功するたびに現在のユーザー名を更新する場合は、以下のように実行できます。

class User < ActiveRecord::Base
  devise :database_authenticatable

  def after_database_authentication
    self.update_attributes(:name => "your name goes here")
  end 
end
于 2012-12-12T09:57:25.637 に答える