I've spent days working with a helpful tester and there seems to be a
problem in persisting Cookies between the BrowserComponent and
ConnectIonRequest. The use case is pretty simple. Sorry about all the
details, I'm desperate for a solution as soon as possible and don't want to
go back and forth covering things we've already tried.
I have a web application that is wrapped in Codename One. This actually
helps testing as we can test performance in the device browser compared to
in the Codename One app easily.
The app shows a BrowserComponent with the web app in it and can log in.
After logging in they can access the web app fine.
In order to register correctly for notifications the app needs to obtain a
token from the server, this is down after logging in (using the
BrowserNavigation callback to check when we've successfully logged in) and
then makes a ConnectionRequest to a specific URL on the server in order to
get a token.
This ConnectionRequest is authenticated with the same cookie / session as
the webbrowser and works correctly. However after making this connection
request the BrowserComponent is no longer logged in (cookie no longer set)
and the next action you take in the app kicks you out to the log in page.
1. BrowserComponent shows log in page
2. On succesful log in the BrowserComponent is redirected to a known URL
3. When the BrowserNavigationCallback detects this logged in URL it
initiates a ConnectionRequest to an API endpoint on the same server
4. The API endpoint responds as expected with the user logged in.
5. The BrowserComponent no longer registers the user as logged in and the
server kicks them back to the log in page.
Skip steps 3 & 4 and the user stays logged in forever. Simulate these steps
in a desktop or mobile browser and the user stays logged in all the time.
I realise that there are a lot of moving pieces and unknowns here for
anyone trying to help but I believe they can be ignored because if we use
the device's browser we can log in, we can also hit the URL that the
connection request hits, get the required result and remain logged in to
the web app. On the device if we don't make the ConnectionRequest we stay
logged in.
We have seen this on the Simulator and Android and iOS however on the
simulator it is erratic, sometimes it'll be immediately logged out other
times it'll stay logged in for 10 minutes or so. On Android it is
immediate, after the ConnectionRequest 'uses' the cookie its no longer set
for the BrowserComponent. iOS also logs out, we haven't found a clear
pattern for this. If I don't make the ConnectionRequest on all platforms
the BrowserComponent will stay logged in, even between runs of the app
which is the desired behaviour. The cookie has a six month expiry and
without making the ConnectionRequest it stays logged in between runs of the
app as it should.
I'm using:
ConnectionRequest.setUseNativeCookieStore(true);
I've tried with
ConnectionRequest.setUseNativeCookieStore(false);
and get the same result.
Any help very much appreciated, I don't know if this is a CN1 bug or a
misuse but I thoroughly tested a very similar set up at the end of last
year and it stayed logged in all the time.
--
You received this message because you are subscribed to the Google Groups
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
Visit this group at https://groups.google.com/group/codenameone-discussions.
To view this discussion on the web visit
https://groups.google.com/d/msgid/codenameone-discussions/895d6c3e-88ae-4142-b030-d7ed43f10ee5%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.