diff --git a/invenio_app_rdm/records_ui/views/decorators.py b/invenio_app_rdm/records_ui/views/decorators.py index 122c2af18..7db8f81c4 100644 --- a/invenio_app_rdm/records_ui/views/decorators.py +++ b/invenio_app_rdm/records_ui/views/decorators.py @@ -403,3 +403,24 @@ def view(**kwargs): return view return decorator + + +def no_cache_response(f): + """Add appropriate response headers to force no caching. + + This decorator is used to prevent caching of the response in the browser. This is needed + in the deposit form as we initialize the form with the record metadata included in the html page + and we don't want the browser to cache this page so that the user always gets the latest version of the record. + """ + + @wraps(f) + def view(*args, **kwargs): + response = make_response(f(*args, **kwargs)) + + response.cache_control.no_cache = True + response.cache_control.no_store = True + response.cache_control.must_revalidate = True + + return response + + return view diff --git a/invenio_app_rdm/records_ui/views/deposits.py b/invenio_app_rdm/records_ui/views/deposits.py index a9ccfe73b..f8eb4df12 100644 --- a/invenio_app_rdm/records_ui/views/deposits.py +++ b/invenio_app_rdm/records_ui/views/deposits.py @@ -37,6 +37,7 @@ from ..utils import set_default_value from .decorators import ( + no_cache_response, pass_draft, pass_draft_community, pass_draft_files, @@ -424,6 +425,7 @@ def new_record(): # Views # @login_required +@no_cache_response @pass_draft_community def deposit_create(community=None): """Create a new deposit.""" @@ -475,6 +477,7 @@ def deposit_create(community=None): @secret_link_or_login_required() @pass_draft(expand=True) @pass_draft_files +@no_cache_response def deposit_edit(pid_value, draft=None, draft_files=None, files_locked=True): """Edit an existing deposit.""" # don't show draft's deposit form if the user can't edit it