Właśnie rozpocząłem pracę nad aplikacją Rails 4 (4.2.3), w której używam Devise
do uwierzytelniania użytkownika. Chcę, aby użytkownicy mogli bawić się z aplikacją przed podpisaniem upp, tworząc projekt testowy i zalogować się jako gość. Kiedy użytkownik zarejestruje się (lub w), chcę przypisać projekt testowy do nowego bieżącego użytkownika.Szyny 4 - Wymyślanie, użytkownicy-goście powodują zatrzymanie łańcucha filtrów
śledzę ten poradnik z Platformatec: https://github.com/plataformatec/devise/wiki/How-To:-Create-a-guest-user
tworzeniu dzieła gościem, ale podczas rejestracji lub przy aktywnej sesji użytkownika gość pojawia się następujący błąd:
Filter chain halted as :require_no_authentication rendered or redirected
Jeśli Wyczyszczę moją sesję, działa. Metoda, która zarządza użytkownikiem gościa, wygląda następująco:
def current_or_guest_user
if current_user
if session[:guest_user_id] && session[:guest_user_id] != current_user.id
logging_in
guest_user(with_retry = false).try(:destroy)
session[:guest_user_id] = nil
end
current_user
else
guest_user
end
end
Jak wspomniano, tworzenie użytkowników-gości wydaje się działać dobrze. Ale ta logika nie dzieje:
# should delete the guest user and clear the session.
if current_user
if session[:guest_user_id] && session[:guest_user_id] != current_user.id
logging_in
guest_user(with_retry = false).try(:destroy)
session[:guest_user_id] = nil
end
current_user
Jestem pewien, że moja sesja Gość jest sprzeczne z moim nowym użytkownikiem i powoduje ten błąd opracować (ponieważ nigdy Gość zostanie usunięty na znak w górę):
Filter chain halted as :require_no_authentication rendered or redirected
Reszta logiki użytkownika-gościa wygląda mniej więcej tak jak ten powiązany przewodnik: https://github.com/plataformatec/devise/wiki/How-To:-Create-a-guest-user. Dodałem także kod z akapitu Uwierzytelnienie/przykład: https://github.com/plataformatec/devise/wiki/How-To:-Create-a-guest-user#authentication-this-may-interfere-with-the-current_user-helper.
Jakieś pomysły na temat tego, czego mi brakuje i jak mogę uzyskać current_or_guest_user
, aby usunąć gościa podczas rejestracji i podpisywania podczas korzystania z Devise?
Aktualizacja
ten sposób moje trasy wyglądają obecnie:
devise_for :users, controllers: { sessions: "users/sessions", registrations: "users/registrations" }
root :to => 'public#index'
resources :apps
get 'users/show', to: "users#show"
get 'users', to: "users#index"
post 'guests/receive_guest', to: "guests#receive_guest"
UPDATE 2
The instrukcji mają następujące oświadczenie:
When (and if) the user registers or logs in, we delete the guest user and clear the session variable.
Nie wyjaśnia, jak i gdzie to zrobić. Zgaduję, że muszę znów zadzwonić pod numer current_or_guest_user
. Ale nie jestem pewien, skąd nie jestem zaznajomiony z Devisem.
Update 3
Aby uczynić go nieco bardziej jasne. Oto kroki, które chcę osiągnąć.
- Użytkownik tworzy projekt testowy.
- Po utworzeniu projektu testowego zostaje utworzony gość i sesja. Gość powinien zostać usunięty po zakończeniu sesji lub # 3.
- Jeśli gość zarejestruje się, powinien on zostać zalogowany, a projekt testowy powinien zostać przypisany do nowego prawdziwego użytkownika.
- Użytkownik-gość powinien zostać usunięty.
Czy możesz opublikować swój plik 'routes.rb'? –
@huzefabiyawarwala Zrobiłem to teraz. – Anders
Próbowałem tego samego, co próbujesz zaimplementować w mojej maszynie i działa dobrze, więc może być to, że brakuje ci czegoś w dodatkowym kodzie, który napisałeś, poza tym, który wymyślisz. Jeśli to możliwe, usuń powyższy kod i opublikuj dokładnie te kontrolery, które masz obecnie. To byłoby łatwiejsze do debugowania. –