0

サインイン後のパスについては、次の操作を実行できます。

def after_sign_in_path_for(resource)
  if resource.class == User
    if resource.sign_in_count < 2
      '/dashboard'
    else
      '/dashboard/home'
    end
  elsif resource.class == AdminUser
    I18n.locale = "en"
    '/admin/dashboard'
  else
    I18n.locale = "en"
    '/'
  end
end

しかし、自分のユーザーが aUserまたはAdminUserafterかどうかを確認するにはどうすればよいsign_outですか?

def after_sign_out_path_for(resource_or_scope)
  if resource_or_scope == AdminUser

これは動作しません。それを確認する方法はありますか?

注: 私はモンキー パッチを実行し、管理者用に新しいルートを定義しましたが、問題は解決しましたがafter_sign_out_path_for、Devise の方法を使用して実装する方法があるかどうか知りたいですか?

4

3 に答える 3

1

これはここで機能します。

def after_sign_out_path_for(resource_or_scope)
  if resource_or_scope == :user
    redirect_to ... # users path
  elsif resource_or_scope == :admin
    redirect_to .... # admins path
  end
end

Deviseはクラス名のシンボルをパラメータとしてafter_sign_out_path_forメソッドを呼び出すので、そのシンボルを元に状態をチェックできます。

于 2013-03-19T13:40:16.960 に答える
1

Devisecurrent_userは、ログインしたユーザーがサインインした後に表示します。ユーザーが管理者か一般ユーザーかということはありません。

したがって、使用できるわけではありません。

他の方法を使用して、必要なものを取得できます。

1つはDeviseとうまく連携するCancanで、ユーザーの役割を定義できます。

Cancan を使用すると、管理者や一般ユーザーなどの各ユーザーの値を使用して、ユーザー テーブルの列 (ロールなど) を定義できます。そのため、Cancan のファイルがあり、そこでAbility.rbロジックを定義できます。

条件を使用できます-

if user.role? :admin
 #admin related logic
elsif user.role? :general
 #general user related logic
end
于 2013-03-19T13:33:47.680 に答える
0

ユーザーモデルでは、ユーザーの役割を指定する列がある場合、次のようなことができます。

def admin?
  role == "admin"
end

その後、あなたがすることは

def after_sign_out_path_for(user)
  if user.admin?
于 2013-09-13T08:26:21.137 に答える