Is this secure?
No. It isn't secure because you can change anyone's email address on the last step. To do so, all I need to do is change the emailId stored in the hidden field (for example, using my browser tools).
In the final step you must verify the token. You don't need step 2 at all.
There are two requests you need: once you have your reset token. Typically you'd click a link in the email.
GET passwordReset (pass in the reset token)
POST passwordReset (pass in the reset token and the new password)
Use the reset token to look up the email that you're changing the password for. The token should be time limited, long and random to avoid guessing.