1

imgur has an interesting feature where

  • you can create a post using https://imgur.com/upload
  • after the upload finishes, you will be redirected to the post's page where you can edit the title as much as you want. If you refresh the page / visit it in another tab--the ability to edit the title is gone.

How is Imgur doing this? My guess is cookies are involved somehow, but I'm not sure.

inetphantom
  • 2,498
  • 4
  • 38
  • 61
Foobar
  • 7,458
  • 16
  • 81
  • 161

3 Answers3

2

On Create save the id of the editable resource, on Render if it matches enable edit and reset the saved editable id.

    return redirect(`resource/$id`, {
         headers: {
          "Set-Cookie":  `editable:$id`,
         },
    });

Then, use the Cookie API to check that cookie.

inetphantom
  • 2,498
  • 4
  • 38
  • 61
  • Well, all of these are done in the frontend and user can find ways around it - like clearing cookies or simply using another browser. If it's important to not let the user edit the title, you need to handle this in the backend too. – Shahriar Jun 07 '22 at 06:26
1

you can check for the navigation type. see the answer from @Илья Зеленько on https://stackoverflow.com/a/53307588/14250290

the types you're looking for are reload and back_forward you probably want to have something happen in the backend happen as well to prevent a malicious user.

Another option would be to send a token from the backend when a post is made and in order to edit a post that exact token would need to be sent back. Just don't save the token in anything that persists and on a refresh or new tab it'll be yeeted.

0

If you do not want to use cookies or session than one way to achieve this is by using useState. update the state when post is created/upload to true(initially false). When user will refresh the page then that state will automatically be false because the component is rendered just now. Note:- If you do not want to use state you can use redux also to achieve this solution. After that use that state or redux state to to enable/disable the ability to edit the post.