Devise предотвратява автоматично влизане след регистрация

TL;DR : Опитвам се да създам нов потребител на Devise от администраторски акаунт, но след като регистрацията приключи, администраторът се прекъсва и влиза като новия потребител.

Ето моят сценарий:

Потребителите могат да се регистрират на моя уебсайт, като въведат данните си за вход в университета. Моето приложение проверява това влизане спрямо университетския LDAP и ако съществува, то ще дублира университетския LDAP запис в моя собствен LDAP + ще създаде запис в база данни за потребителя в приложението rails. Засега това е добре и работи:

Правя това, като отменя Devise Registration Controller

class Student::RegistrationsController < Devise::RegistrationsController

  skip_before_filter :access_denied

  def create
    login = sign_up_params[:login]
    if already_in_our_ldap?(login) 
      redirect_to root_path and return
    else
      # Ask our university LDAP
      university_ldap_entry = get_university_student(login)
      # If the entry was found on the LDAP
      if university_ldap_entry
        add_to_our_ldap(university_ldap_entry)
        # resume controller action
      else
        redirect_to new_user_registration_path and return
      end
    end

    # Rest is more or less copy paste from Devise RegistrationController
    build_resource(sign_up_params)
    resource_saved = resource.save
    yield resource if block_given?
    if resource_saved
      if resource.active_for_authentication?
        set_flash_message :notice, :signed_up if is_flashing_format?
        sign_up(resource_name, resource)
        respond_with resource, location: after_sign_up_path_for(resource)
      else
        set_flash_message :notice, :"signed_up_but_#{resource.inactive_message}" if is_flashing_format?
        expire_data_after_sign_in!
        respond_with resource, location: after_inactive_sign_up_path_for(resource)
      end
    else
      clean_up_passwords resource
      set_minimum_password_length
      respond_with resource
    end
  end
end

В моя случай

Администраторът трябва да може да регистрира ученици, докато вече е свързан на моя уебсайт.

И така, имам изглед, който ще създаде модал, където е възможно да се направи запитване към LDAP на университета за имена, и формуляр, който ще ПУБЛИКУВА влизането в горния Student::RegistrationsController...

ИЗПОЛЗВАНЕ НА AJAX

Моят проблем

AJAX формулярите работят добре, успешно дублират университетския LDAP запис в нашия LDAP + създайте записа в базата данни

НО

Той също така създава сесия, съответстваща на тази на новия потребител (без дори да иска паролата). Така че администраторът, който е използвал модала, за да регистрира ученик, е изключен от неговата сесия (и на всичкото отгоре това се прави чрез AJAX и той няма да забележи, че е бил прекъснат/свързан отново като друг потребител, освен ако не презареди страницата)

Разбира се, предвиденото поведение е, че използването на модала трябва просто да създаде LDAP+DB запис, без да променя сесията.

РЕДАКТИРАНЕ

Всъщност той също свързва потребителя след html/POST регистрация. Моят код изпраща паролата по имейл на потребителя, който току-що се е регистрирал, така че не искам новият потребител да може да се свързва автоматично само чрез въвеждане на валидно име =_= !


person Cyril Duchon-Doris    schedule 18.06.2015    source източник


Отговори (1)


Моите извинения, не разбрах наистина функцията sign_up на devise. Мислех, че този метод финализира създаването на нов потребителски запис, но вместо това той просто се опитва да sign_in като новосъздадения потребител.

Така че беше достатъчно да коментирате ред sign_up

Не съм роден английски, но си помислих, че sign_in означава действително свързване с нечии идентификационни данни, докато sign_up е актът на абониране за уебсайт (не непременно свързване веднага след това). Греша ли ?

person Cyril Duchon-Doris    schedule 19.06.2015
comment
sign_in е това, което правите, когато искате да влезете в уебсайт. методът на devise sign_up според мен е функция, която влиза в системата на потребител, когато се регистрира, вижте тук ----› rubydoc.info/github/plataformatec/devise/Devise/ - person BKSpurgeon; 09.07.2016
comment
спести ми много време :) - person Sebastian Delgado; 19.12.2016