diff --git a/packages/component-user/app/components/AdminUserForm.js b/packages/component-user/app/components/AdminUserForm.js
index 6b29d7dc0b611646f0184009e70a299e64cb36a5..272798dba7b4958b826243aacb3c5414dff87b49 100644
--- a/packages/component-user/app/components/AdminUserForm.js
+++ b/packages/component-user/app/components/AdminUserForm.js
@@ -27,6 +27,7 @@ import {
 } from 'pubsweet-component-faraday-ui'
 
 const FormModal = ({
+  edit,
   roles,
   title,
   titles,
@@ -39,10 +40,16 @@ const FormModal = ({
   initialValues,
   confirmText = 'OK',
   cancelText = 'Cancel',
+  user,
 }) => (
   <Root>
     <IconButton icon="x" onClick={onClose} right={5} secondary top={5} />
     <H2>{title}</H2>
+    {edit && (
+      <Text mb={1} secondary>
+        {get(user, 'email', '')}
+      </Text>
+    )}
     <Formik
       initialValues={initialValues}
       onSubmit={onSubmit}
@@ -53,30 +60,28 @@ const FormModal = ({
           errors.email = 'Required'
         }
 
-        if (get(values, 'affiliation', '') === '') {
-          errors.affiliation = 'Required'
-        }
-
         return errors
       }}
     >
       {({ handleSubmit, ...rest }) => (
         <Fragment>
-          <Row alignItems="baseline" mb={1} mt={1}>
-            <ItemOverrideAlert mr={1} vertical>
-              <Label required>Email</Label>
-              <ValidatedFieldFormik
-                component={TextField}
-                inline
-                name="email"
-                validate={[required]}
-              />
-            </ItemOverrideAlert>
-            <ItemOverrideAlert ml={1} vertical>
-              <Label required>Role</Label>
-              <ValidatedMenuField name="role" options={roles} />
-            </ItemOverrideAlert>
-          </Row>
+          {!edit && (
+            <Row alignItems="baseline" mb={1} mt={1}>
+              <ItemOverrideAlert mr={1} vertical>
+                <Label required>Email</Label>
+                <ValidatedFieldFormik
+                  component={TextField}
+                  inline
+                  name="email"
+                  validate={[required]}
+                />
+              </ItemOverrideAlert>
+              <ItemOverrideAlert ml={1} vertical>
+                <Label required>Role</Label>
+                <ValidatedMenuField name="role" options={roles} />
+              </ItemOverrideAlert>
+            </Row>
+          )}
 
           <Row mb={2}>
             <Item mr={1} vertical>
@@ -109,8 +114,14 @@ const FormModal = ({
           </RowOverrideAlert>
 
           <Row mb={3}>
-            <Item vertical>
-              <Label required>Affiliation</Label>
+            {edit && (
+              <ItemOverrideAlert mr={1} vertical>
+                <Label required>Role</Label>
+                <ValidatedMenuField name="role" options={roles} />
+              </ItemOverrideAlert>
+            )}
+            <Item ml={edit && 1} vertical>
+              <Label>Affiliation</Label>
               <ValidatedFieldFormik
                 component={TextField}
                 inline
diff --git a/packages/component-user/server/user.js b/packages/component-user/server/user.js
index 1ad3234a40b06d4497f4809bbf08fed308151790..83e107959aab56dc564e63a869843f55fa02642d 100644
--- a/packages/component-user/server/user.js
+++ b/packages/component-user/server/user.js
@@ -26,7 +26,7 @@ module.exports = {
         },
       },
       accessTokens: {
-        confirmation: chance.hash(),
+        passwordReset: chance.hash(),
         unsubscribe: chance.hash(),
       },
     }
diff --git a/packages/xpub-faraday/config/authsome-mode.js b/packages/xpub-faraday/config/authsome-mode.js
index df9ecde417ba4e3a4b01692629cbb64c9027bf47..27a22b8b852685e2b8923f80e68f8471f5a5d19e 100644
--- a/packages/xpub-faraday/config/authsome-mode.js
+++ b/packages/xpub-faraday/config/authsome-mode.js
@@ -206,6 +206,14 @@ async function applyAuthenticatedUserPolicy(user, operation, object, context) {
     ) {
       return helpers.isOwner({ user, object: object.fragment })
     }
+
+    // allow user to authenticate itself
+    if (
+      get(object, 'type') === 'user' &&
+      get(object, 'id') === get(user, 'id')
+    ) {
+      return true
+    }
   }
 
   if (operation === 'PATCH') {