Chrome Forgets Passwords

Chrome has been forgetting my passwords for some sites.  It sucks.  I don’t use an external password manager, I like the built-in one.

So, what happens is we have two login forms on the same host, and the origin_url and action_url in the Chrome Password Manager get confused.  This file is called ‘Login Data’ and it’s a SQLite 3 database.  Awesome.

To execute these steps, you will have to shut down Chrome, we can’t work on this while these files are locked.

On Linux it could be in ~/.config/google-chrome/ or ~/.config/chromium, on Windows it’s buried in the AppData location I think.

So, then open up that file and find the site you’re having problems with, replacing the example domain.

sqlite3 ./Login\ Data
.schema logins
select origin_url, action_url, username_element from logins where origin_url like ''

The result here should show multiple entries.  Take a glance at these results.  And save them somewhere.  Exit SQLite (CTRL+D) and then start Chrome with this profile.  Visit one of the two forms you have on this site.  In our case we had the main Application sign-in as an action_url and we also had a back-end system with a different action_url.  But, in Chrome they each had the same origin_url (even though each has a unique origin_url).

What happens, we sign-in to the main App; and Chrome updates the record with this origin_url to have the action_url of the App action.  Then we sign out of the App and sign in to the management tool, the same record in Chrome now has the action_url changed to point to the management tool.  The origin_url is unchanged.  It’s like Chrome is not specific enough on the realm, or origin_url somehow.

So, to fix this we had to manually add a record that contains the correct origin_url and action_url.

This means, select an existing record from the logins, then insert a record that looks pretty similar.  You have to shut down Chrome to do this.  Select a row, you’ll see a lot of data spew out as described in the schema above.

SELECT * FROM logins WHERE origin_url = '';
INSERT INTO logins (origin_url, action_url, signon_realm, date_created, ssl_valid, preferred, blacklisted_by_user, scheme) VALUES ( '', '', '',1414192238, 1, 0, 0, 0);

Once you’ve added this stub row, you’ll have to then start Chrome, and then visit both forms on the site that is causing problems.  Chrome may also duplicate rows, so after you do both sign-ins use the Password Manager to check if there are any odd looking entries for the site in question.

You may need to fiddle around with the origin_url, action_url and signon_realm to get it dialed in for your situation.