Przekierowanie linku z parametrami logowania do aplikacji

Przekierowanie linku z parametrami logowania do aplikacji
AL
  • Rejestracja:ponad 3 lata
  • Ostatnio:około rok
  • Postów:14
0

Witam, temat może nie mówi za wiele, ale w skrócie opiszę problem.

Mam stworzoną aplikację full-stack. Po wejściu na adres (np. localhost) wyświetla się główny widok aplikacji, składający się z wielu modułów. Następnie po kliknięciu w wybrany moduł jest wyświetlany popup jako okienko logowania z inputami login i hasło.
Dopiero po sprawdzeniu poprawności loginu i hasła, aplikacja przekierowuje na główną stronę modułu z parametrami moduleId, intent i typ(uzt lub prc).
Intent to linki do modułów, np.: '/app/zamowienia'.
Dodatkowo sprawdzania jest także licencja aplikacji.

Celem jest utworzenie na stronie www.example.com buttona, który otworzy okienko logowania konkretnego modułu (jednego z kilku, może być zdefiniowane na sztywno) z jednoczesnym pominięciem głównego widoku aplikacji czyli '/app'.
Istnieje sposób, żeby dokonać czegoś takiego?

Wszystkie rady będą bardzo cenne, nie wiem jak się do tego zabrać.

ZD
  • Rejestracja:około 3 lata
  • Ostatnio:ponad rok
  • Postów:2310
0

@Aloinopsis:

No dobra, ale jaki jest twój stosunek do tego softwaru?
jesteś biernym (na poziomie technicznym) klientem, wdrożeniowcem, autorem ?

Na pewno myślisz o Javie, a nie JavaScripcie ?


If you put a million monkeys at a million keyboards, one of them will eventually write a Java program - the rest of them will write Perl
edytowany 2x, ostatnio: ZrobieDobrze
AL
  • Rejestracja:ponad 3 lata
  • Ostatnio:około rok
  • Postów:14
0

Jestem autorem tej aplikacji, ale chciałbym ją rozbudować.
Ze strony APP_1 www.example.com mam przez button zalogować się jako osoba kontaktowa do aplikacji APP_2, ale bezpośrednio w wybrany moduł. Nie chcę pokazywać wszystkich modułów, jakie są dostępne.
Mam utworzone tabele UZYTKOWNIK i OSOBA_KONTAKTOWA.
W JavaScript też będę musiał dodać metody, ale chciałem zacząć od strony backendowej.

RequiredNickname
Twój backend powinien zwracać po prostu dane pod danym endpointem potrzebne do wyświetlenia tego co w danym "module" na froncie jest potrzebne. On nie powinien wiedzieć nic o żadnych przekierowaniach (upraszczam bo na backendzie można zastosować np redirectUrl w response). To frontend powinien wiedzieć jak się zachować imho
ZD
  • Rejestracja:około 3 lata
  • Ostatnio:ponad rok
  • Postów:2310
0
Aloinopsis napisał(a):

Jestem autorem tej aplikacji, ale chciałbym ją rozbudować.
Ze strony APP_1 www.example.com mam przez button zalogować się jako osoba kontaktowa do aplikacji APP_2, ale bezpośrednio w wybrany moduł. Nie chcę pokazywać wszystkich modułów, jakie są dostępne.
Mam utworzone tabele UZYTKOWNIK i OSOBA_KONTAKTOWA.
W JavaScript też będę musiał dodać metody, ale chciałem zacząć od strony backendowej.

No i z czym JAKO AUTOR niemałego przecież systemu/programu webowego masz problem ?


If you put a million monkeys at a million keyboards, one of them will eventually write a Java program - the rest of them will write Perl
edytowany 1x, ostatnio: ZrobieDobrze
AL
Nie wiem jak te dwie rzeczy połączyć. Czy da się to zrobić w Javie czy w Javascript jest konieczna modyfikacja?
ZD
Że kręcisz, to jest dla mnie oczywiste, tylko jeszcze nie wiem gdzie się zaplątałeś
AL
Po prostu nie wiem jak to zrobić, liczyłem na podpowiedzi, jak udostępnić logowanie innym użytkownikom zarejestrowanym w systemie. Chcę wejść na stronę, kliknąć "złóż zamówienie" i otworzyć okienko logowania do modułu a nie całej aplikacji. Jeśli pominę '/app' to się wywala aplikacja.
Riddle
Administrator
  • Rejestracja:prawie 15 lat
  • Ostatnio:3 minuty
  • Lokalizacja:Laska, z Polski
  • Postów:10074
0
Aloinopsis napisał(a):

Witam, temat może nie mówi za wiele, ale w skrócie opiszę problem.

Mam stworzoną aplikację full-stack. Po wejściu na adres (np. localhost) wyświetla się główny widok aplikacji, składający się z wielu modułów. Następnie po kliknięciu w wybrany moduł jest wyświetlany popup jako okienko logowania z inputami login i hasło.
Dopiero po sprawdzeniu poprawności loginu i hasła, aplikacja przekierowuje na główną stronę modułu z parametrami moduleId, intent i typ(uzt lub prc).
Intent to linki do modułów, np.: '/app/zamowienia'.
Dodatkowo sprawdzania jest także licencja aplikacji.

Celem jest utworzenie na stronie www.example.com buttona, który otworzy okienko logowania konkretnego modułu (jednego z kilku, może być zdefiniowane na sztywno) z jednoczesnym pominięciem głównego widoku aplikacji czyli '/app'.
Istnieje sposób, żeby dokonać czegoś takiego?

Wszystkie rady będą bardzo cenne, nie wiem jak się do tego zabrać.

Najlepiej jakbyś pokazał kod aplikacji, bo bez tego ciężko coś podpowiedzieć.

AL
  • Rejestracja:ponad 3 lata
  • Ostatnio:około rok
  • Postów:14
0
Kopiuj
@RequestMapping(value = "/uzt", method = RequestMethod.POST)
@ResponseStatus(HttpStatus.OK)
@ResponseBody
public ResponseLoginUzt basicUserLogin(@RequestBody RequestLoginUzt request) {
    
    // sprawdzanie poprawnosci loginu i hasla
    LoginUzt loginUzt = uzytkownikDao.logInUzt(request);
    if(loginUzt == null) {
        // niepoprawne dane logowania
        return new ResponseLoginUzt(null, STATUS_INCORRECT_LOGIN_DATA);
    }
    
    // Sprawdzenie uprawnien na modul
    if (!uprawnieniaDao.checkUprawnienieByUztIdAndUprId(loginUzt.getIdUzt(), request.getModuleId())) {
    // jesli nie ma to zwroc odpowiedni kod, jesli jest to idz dalej
        return new ResponseLoginUzt(null, STATUS_NO_PERMISSION);
    }

    LicenseReader licenseReader = new LicenseReader();
    licenseReader.decryptLicense(konfiguracjaDao.getLcn());

    if(applicationLoginDao.getReservedLicenseNum(request.getModuleId())
        >= licenseReader.getNumForModule(request.getModuleId())) {
        // brak wolnych licencji
        return new ResponseLoginUzt(null, STATUS_NO_AVALIABLE_LICENSE);
    }
            
    // tworzenie loga (rezerwacja licencji)
    Uprawnienia uprawnienia = new Uprawnienia();
    Integer uprId = uprawnienia.searchUrpByIdModule(request.getModuleId());
     Integer sessionId = applicationLoginDao.create(
            new ApplicationLogin(
                    new Timestamp(System.currentTimeMillis()), 
                    loginUzt.getIdUzt(),
                    loginUzt.getIdPrc(),
                    uprId,
                    request.getComputerId()
            )
    );
    loginUzt.setSessionId(sessionId);
    return new ResponseLoginUzt(loginUzt, STATUS_LOGIN_SUCCESSFUL);
}
edytowany 2x, ostatnio: Riddle
RequiredNickname
Czemu mam wrażenie, że to projekt z sektora publicznego? ;-)
RequiredNickname
I to na dodatek pewnie jakiś staroć sądząc, że ktoś tam swego czasu zastosował wzorzec DAO ;)
RequiredNickname
  • Rejestracja:prawie 5 lat
  • Ostatnio:10 minut
  • Postów:620
0

Jak dla mnie to tutaj trochę takie pomieszanie z poplątaniem.
Masz osobno frontend i backend.
Backend wystawia pewne endpointy (w tym ten do logowania) które powinny być w jakiś sposób zabezpieczone (token jwt, basic auth whatever). Do tego dochodzi kwestia sprawdzania licencji (per aplikacja lub per moduł).

Masz też frontend który posiada jakąś stronę główną, możliwość zalogowania się + podstrony do konkretnych modułów.
Możesz po stronie frontu:

  1. Przekierować użytkownika na główny widok (użytkownik jeszcze niezalogowany) wyświetlić mu pewne informacje + dać możliwość zalogowania się
  2. Przekierować użytkownika na podstronę konkretnego modułu jednocześnie, próbując odpytać się backend o dane potrzebne do wyświetlenia wszystkiego jak trzeba, załączyć poświadczenie zalogowania (np. token) i np. w razie braku tego poświadczenia (na podstawie stosownego statusu 4xx) wyświetlić użytkownikowi informację że musi się zalogować (lub od razu wyświetlić mu okienko logowania)

Co do sprawdzania licencji, po zautoryzowaniu się w aplikacji (np. na podstawie jakiegoś ciasteczka itp) jesteś w stanie np. sprawdzić kwestie związane z licencja (bez różnicy czy pod kątem całej aplikacji czy pojedynczego modułu).

Jak dla mnie to Twój problem (o ile masz poprawnie skonstruowane api po stronie backendu) jest typowo frontendowy wnioskując po komentarzu:

Chcę wejść na stronę, kliknąć "złóż zamówienie" i otworzyć okienko logowania do modułu a nie całej aplikacji. Jeśli pominę '/app' to się wywala aplikacja

Jak rozumiem, rzeczy frontendowych zbytnio nie ogarniasz a ktoś zrzucił na Ciebie to zadanie czy jak?

AL
  • Rejestracja:ponad 3 lata
  • Ostatnio:około rok
  • Postów:14
0

Zgadza się, nie dość, że muszę to jakoś ogarnąć, to nie wiem za bardzo jak się za to wziąć.
Na backendzie tokenJwt jest zrobiony. Na froncie logowanie jest w kilku plikach, są eksporty i importy (logowanie, autoryzacja, typ użytkownik/pracownik, licencja, etc), jednym słowen sporo rzeczy.
Na obecną chwilę, w route.js mam dodatkowy link, podobnie jak do modułów.
Jest też dodatkowe zabezpieczenie dla każdego z modułów po zaimportowaniu go do mountes().
Jeśli jest aktywny, to nie wejdę do modułu(ale tylko przez link, który stworzyłem), jeśli zakomentowany to można się zalogować, ale po wylogowaniu się jest dostęp do aplikacji, czego nie powinno być, więc to rozwiązanie jest słabe. Są jakieś sposoby, żeby to lepiej zrobić, z pominięciem głównej aplikacji?

RequiredNickname
  • Rejestracja:prawie 5 lat
  • Ostatnio:10 minut
  • Postów:620
0

Imho powinieneś to pytanie zadać w dziale dot. JS

Riddle
@RequiredNickname: Zadał. Stworzył dwa identycznie pytania w JavaScript oraz Java. Zostawiłem to, a tamto usunąłem jako zduplikowany wątek.
piotrpo
  • Rejestracja:ponad 7 lat
  • Ostatnio:4 dni
  • Postów:3277
1

A nie możesz tego zrobić jak w OAuth?

  • wchodzisz na example.com
  • klikasz "zaloguj" i przechodzisz pod adres login.com?redirectUri=example.com/nazwamodulu
  • Jeżeli proces logowania się powiedzie, to strona login.com zwraca http 302 location=example.com/nazwamodulu?token=blahblah
AL
  • Rejestracja:ponad 3 lata
  • Ostatnio:około rok
  • Postów:14
0

Sprawdziłem, co to jest OAuth i wydaje się sensownym rozwiązaniem. Spróbuję rozwiązać problem tym sposobem.

RequiredNickname
A macie to już? Bo jak dla mnie pchanie nowych klocków tylko dlatego że się nie potrafi korzystać z tych które są jest strasznie słabe...
RequiredNickname
Tzn rozwiązanie powinno być dobre więc min. Wpasowujące się w obecna architekturę rozwiązania a nie ulepione byle jak byle jakoś dzisiaj działało.
RequiredNickname
A z drugiej strony skoro dają takie zadania komuś kto nie jest frontendowcem to pewnie mają to gdzieś...
AL
OAuth nie jest nigdzie w kodzie zaimplementowane.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.