{"action":"created","issue":{"url":"https://api.github.com/repos/BroadleafCommerce/BroadleafCommerce/issues/356","labels_url":"https://api.github.com/repos/BroadleafCommerce/BroadleafCommerce/issues/356/labels{/name}","comments_url":"https://api.github.com/repos/BroadleafCommerce/BroadleafCommerce/issues/356/comments","events_url":"https://api.github.com/repos/BroadleafCommerce/BroadleafCommerce/issues/356/events","html_url":"https://github.com/BroadleafCommerce/BroadleafCommerce/pull/356","id":19328993,"number":356,"title":"Admin session expiration event can lead to loss of data","user":{"login":"phillipuniverse","id":684275,"avatar_url":"https://avatars.githubusercontent.com/u/684275?v=3","gravatar_id":"","url":"https://api.github.com/users/phillipuniverse","html_url":"https://github.com/phillipuniverse","followers_url":"https://api.github.com/users/phillipuniverse/followers","following_url":"https://api.github.com/users/phillipuniverse/following{/other_user}","gists_url":"https://api.github.com/users/phillipuniverse/gists{/gist_id}","starred_url":"https://api.github.com/users/phillipuniverse/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/phillipuniverse/subscriptions","organizations_url":"https://api.github.com/users/phillipuniverse/orgs","repos_url":"https://api.github.com/users/phillipuniverse/repos","events_url":"https://api.github.com/users/phillipuniverse/events{/privacy}","received_events_url":"https://api.github.com/users/phillipuniverse/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/BroadleafCommerce/BroadleafCommerce/labels/difficulty-medium","name":"difficulty-medium","color":"207de5"},{"url":"https://api.github.com/repos/BroadleafCommerce/BroadleafCommerce/labels/module-admin","name":"module-admin","color":"207de5"},{"url":"https://api.github.com/repos/BroadleafCommerce/BroadleafCommerce/labels/type-feature","name":"type-feature","color":"009800"}],"state":"open","locked":false,"assignee":{"login":"ncrum","id":3411402,"avatar_url":"https://avatars.githubusercontent.com/u/3411402?v=3","gravatar_id":"","url":"https://api.github.com/users/ncrum","html_url":"https://github.com/ncrum","followers_url":"https://api.github.com/users/ncrum/followers","following_url":"https://api.github.com/users/ncrum/following{/other_user}","gists_url":"https://api.github.com/users/ncrum/gists{/gist_id}","starred_url":"https://api.github.com/users/ncrum/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ncrum/subscriptions","organizations_url":"https://api.github.com/users/ncrum/orgs","repos_url":"https://api.github.com/users/ncrum/repos","events_url":"https://api.github.com/users/ncrum/events{/privacy}","received_events_url":"https://api.github.com/users/ncrum/received_events","type":"User","site_admin":false},"milestone":{"url":"https://api.github.com/repos/BroadleafCommerce/BroadleafCommerce/milestones/4","labels_url":"https://api.github.com/repos/BroadleafCommerce/BroadleafCommerce/milestones/4/labels","id":359642,"number":4,"title":"Reviewed - Not Yet Assigned","description":"Used as a planning bucket for tasks that the Broadleaf team has looked over and reviewed and has determined as relevant but has not yet prioritized it for a sprint.","creator":{"login":"bpolster","id":1189191,"avatar_url":"https://avatars.githubusercontent.com/u/1189191?v=3","gravatar_id":"","url":"https://api.github.com/users/bpolster","html_url":"https://github.com/bpolster","followers_url":"https://api.github.com/users/bpolster/followers","following_url":"https://api.github.com/users/bpolster/following{/other_user}","gists_url":"https://api.github.com/users/bpolster/gists{/gist_id}","starred_url":"https://api.github.com/users/bpolster/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bpolster/subscriptions","organizations_url":"https://api.github.com/users/bpolster/orgs","repos_url":"https://api.github.com/users/bpolster/repos","events_url":"https://api.github.com/users/bpolster/events{/privacy}","received_events_url":"https://api.github.com/users/bpolster/received_events","type":"User","site_admin":false},"open_issues":55,"closed_issues":5,"state":"open","created_at":"2013-06-19T22:00:04Z","updated_at":"2015-01-28T03:49:00Z","due_on":"2025-06-29T07:00:00Z","closed_at":null},"comments":11,"created_at":"2013-09-11T16:04:11Z","updated_at":"2015-01-30T22:08:38Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/BroadleafCommerce/BroadleafCommerce/pulls/356","html_url":"https://github.com/BroadleafCommerce/BroadleafCommerce/pull/356","diff_url":"https://github.com/BroadleafCommerce/BroadleafCommerce/pull/356.diff","patch_url":"https://github.com/BroadleafCommerce/BroadleafCommerce/pull/356.patch"},"body":"1. Edit an entity in the admin\r\n2. Spend enough time on the form to warrant a session expiration\r\n3. Submit the form\r\n\r\nResult is that the user is taken back to the login page since their session expired. However, after the user logs in, they go back to the edit page but all of new data they filled out is lost.\r\n\r\nPotential solutions:\r\n- Show a banner when the session has expired, something like \"Your session has expired, please save all data offline before continuing\"\r\n- Show a banner warning when the session is < 1min from expiring as well as after it has expired\r\n- Save the POST data on the redirect to the login page and resubmit the original POST after successful login (potential security risk?)"},"comment":{"url":"https://api.github.com/repos/BroadleafCommerce/BroadleafCommerce/issues/comments/72278909","html_url":"https://github.com/BroadleafCommerce/BroadleafCommerce/pull/356#issuecomment-72278909","issue_url":"https://api.github.com/repos/BroadleafCommerce/BroadleafCommerce/issues/356","id":72278909,"user":{"login":"bpolster","id":1189191,"avatar_url":"https://avatars.githubusercontent.com/u/1189191?v=3","gravatar_id":"","url":"https://api.github.com/users/bpolster","html_url":"https://github.com/bpolster","followers_url":"https://api.github.com/users/bpolster/followers","following_url":"https://api.github.com/users/bpolster/following{/other_user}","gists_url":"https://api.github.com/users/bpolster/gists{/gist_id}","starred_url":"https://api.github.com/users/bpolster/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bpolster/subscriptions","organizations_url":"https://api.github.com/users/bpolster/orgs","repos_url":"https://api.github.com/users/bpolster/repos","events_url":"https://api.github.com/users/bpolster/events{/privacy}","received_events_url":"https://api.github.com/users/bpolster/received_events","type":"User","site_admin":false},"created_at":"2015-01-30T22:08:38Z","updated_at":"2015-01-30T22:08:38Z","body":"The dialogue looks good to me.   I haven't tested locally but had a few questions / test cases for you to comment on. \r\n\r\n1.  Confirm that \"stay logged in\" makes a server request so that session stays alive.\r\n2.  Confirm that \"logout\" calls \"logout\"\r\n3.  I think the right answer is that when the session expires, it should also effectively call logout (or other method that invalidates the session on the server) before taking the user to the login page\r\n4.  \"/admin\" is a web application context and shouldn't be hard-coded\r\n"}}