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:około 7 godzin
  • Lokalizacja:Laska, z Polski
  • Postów:10067
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:około 12 godzin
  • Postów:619
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:około 12 godzin
  • Postów:619
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:dzień
  • 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.
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)