            ;; We create an empty session. This is because the POST
            ;; handler requires that a session exists within which it can
            ;; store the identity on a successful login
+           ;; (revisit: the comment above is wrong, the POST handler can
+           ;; create the session)
            (respond-with-new-session! session-store req {} resp)
            resp)))
 


     })

  (routes [this]
    ["/" {"signup" {:get ::GET-signup-form
                    :post ::POST-signup-form}
          "verify-email" {:get ::verify-user-email}
          }])

  (uri-context [this] ""))

(defn new-signup-with-totp [& {:as opts}]
  (component/using

                                 (make-verification-link req code email)))))

         ;; Create a session that contains the secret-key
         (let [data (merge {:cylon/subject-identifier uid :name name}
                           (when (satisfies? OneTimePasswordStore user-store)
                             {:totp-secret totp-secret}))]
           (assoc-session-data! session-store req data)

           (respond-with-new-session!
            session-store req
            {:cylon/subject-identifier uid}
            (if-let [loc (or (get form "post_signup_redirect")
                             (:post-signup-redirect component))]
              (redirect-after-post loc)
              (response (format "Thank you, %s, for signing up" name)))))))

     ::verify-user-email
     (fn [req]
       (let [params (-> req params-request :params)
             body
             (if-let [[email code] [ (get params "email") (get params "code")]]
               (if-let [store (get-token-by-id (:verification-code-store component) code)]
                 (if (= email (:email store))
                   (do (verify-email! user-store (:name store))
                       (format "Thanks, Your email '%s'  has been verified correctly " email))
