0

My login based application, requires to always know the username of the logged in user. (MVP) . So I'm getting the username from the url, but when the page opens after the login succeeded, I can't get the username from the url, because it does not appear to exists, but it is there. It only works after a refresh. Then I'm able to get the username.

The URL is in the form http://127.0.0.1:8888/AdministrareBloc.html#AdminPlace:admin, where I'm splitting the String to only get the admin part.

I thought this is because it downloads the code before verifying the user. So I placed a split point in my code like this: (I don't know if I placed it correctly)

loginButton.addClickHandler(new ClickHandler() {

        @Override
        public void onClick(ClickEvent event) {
            final String username = usernameBox.getText();
            final String password = passwordBox.getText();
            GWT.runAsync(new RunAsyncCallback() {

                @Override
                public void onSuccess() {
                    performUserConnection(username, password);
                }

                @Override
                public void onFailure(Throwable reason) {
                    // TODO Auto-generated method stub
                }
            });
        }
    });


private static void performUserConnection(String username, String password) {
    DBConnectionAsync rpcService = (DBConnectionAsync) GWT.create(DBConnection.class);
    ServiceDefTarget target = (ServiceDefTarget) rpcService;
    String moduleRelativeURL = GWT.getModuleBaseURL() + "DBConnectionImpl";
    target.setServiceEntryPoint(moduleRelativeURL);

    rpcService.authenticateUser(username, password, new AsyncCallback<User>() {

        @Override
        public void onSuccess(User user) {

            if (user.getType().equals("User")) {
                String username = user.getUsername();
                presenter.goTo(new UserPlace(username));
            } else if (user.getType().equals("Admin")) {
                String username = user.getUsername();
                presenter.goTo(new AdminPlace(username));
            }
        }

    }
}

This is happening when the user clicks the login button. Is the split point placed correclty, or not ? How can I get the username without needing to refresh the page after a successful login ?

UPDATE

I've tried a trick today, placing a Window.Location.reload() inside the AdminViewImpl and UserViewImpl, and when the application starts, then the page reloads every second, so this means for me that the split point is not correclty used and the browser downloads the code before he actually needs it, and that's why I'm able to see the username after the refresh, because it redownloads the code, and I'm already logged in when I refresh.

Thanks in advance

  • Are you using the History mechanism for this ? What is the output of History.getToken() ? – Knarf May 31 '16 at 08:18
  • Hello. I'm using History mechanism. And the result is nothing after login, but after a refresh (after the login), the result is as expected : `UserPlace:andrei.olar`. I've tried a trick today, placing a `Window.Location.reload()` inside the `AdminViewImpl` and `UserViewImpl`, and when the application starts, then the page reloads every second, so this means for me that the split point is not correclty used and the browser downloads the code before he actually needs it, and that's why I'm able to see the username after the refresh, because redownloads the code, and I'm already logged in by now. –  Jun 01 '16 at 12:15
  • What is wrong with the code splitting then ? How can I repair that ? –  Jun 01 '16 at 12:15

0 Answers0