2014-09-04 111 views
3

我将Friend添加到我的Compojure应用程序进行身份验证。我正在使用workflows/interactive-form。我有一个表单可以让我注册一个新用户(JS POST到/register),并且我有一个表单让我登录(JS POST到/login),而且他们都工作得很好。从服务器端登录好友?

我想要新的用户注册也自然地登录用户。有没有简单的方法来说服务器端的“此用户现在已登录”? (客户端AJAX调用/register拥有用户名和密码,所以我可以简单地以/login预期的方式重新编码表单数据,并提交第二个AJAX请求登录。看起来好像是尴尬,虽然)。

我认为这可能与:workflows有关,但该文档的一部分有点令我费解。

回答

0

我只是处理同样的问题,也宁愿避免第二个不必要的AJAX请求。好友代码有点令人生畏,但您需要关注cemerick.friend.workflows/make-authcemerick.friend/merge-authentication函数。这是一个复杂的问题,在很大程度上取决于你的代码,但在这里是一个粗略的代码片段,让你在正确的方向开始:

(ns my-auth 
    (:require [cemerick.friend :as friend] 
      [cemerick.friend.workflows :refer [make-auth]])) 

(let [user (get-user-data-from-db) 
     auth (cemerick.friend.workflows/make-auth user 
       {::friend/redirect-on-auth? false}) 
     merged-auth-in-session (friend/merge-authentication {} auth)]) 

make-auth功能得到你所需要的AUTH结构,merge-authentication函数更新会话中的身份验证。你如何处理结果响应(merged-auth-in-session)取决于你的框架(例如Liberator)。