在控制器中验证用户并将会话发送到前端

时间:2017-04-04 08:11:57

标签: authentication grails authorization

在控制器的后端,我想登录用户。然后我想渲染一个视图Broad Institute of MIT and Harvard - Cambridge/Boston, MA - ONSITEDo you want to help cure cancer? Do you care about the mission behind your software engineering?We are a motivated team of software engineers building scalable tools to analyze massive amounts of genomic data using cloud compute software to process 24TB of biological data daily... and that's just the beginning! We are co-developing products to advance science with the biggest partners in the industry -- working directly with and alongside their engineers.We are seeking strong software engineers to join our team. We have a flat organizational structure with self-directed, agile teams.We use Scala, Spark, Akka, React & Clojurescript. Experience in the tech stack or sciences not req'd.Here is some recent information on our mission: http://www.wbur.org/commonhealth/2016/07/07/precision-medici...Interested? Please email Amy Massey - massey@broadinstitute.org/n/n/nID is https://news.ycombinator.com/item?,用户将在其中进行身份验证。

方案

  1. 为用户提供链接
  2. 他转到链接
  3. 后端将链接重定向到控制器
  4. 控制器为用户创建一个临时帐户并对其进行身份验证。
  5. 控制器呈现视图并 ????以某种方式将会话发送到前端????
  6. 如何将会话发送到前端?

2 个答案:

答案 0 :(得分:1)

定义前端?

  

后端将链接重定向到控制器。控制器创建一个   用户的临时帐户并验证他。

这就是我正在做的事情套接字执行身份验证,从后端访问该用户的http会话并放入他们已经登录的那些。然后我将套接字触发器发送回前端html说完所有确定 此时gsp从套接字获得响应,并说aha重定向到/site/hello

  

控制器呈现视图和????以某种方式将会话发送到前端????

此/ site / hello现在检查特定会话,井用户现在也已登录..当用户通过身份验证而非前端会话时,会话详细信息由后端设置

在gsp中你可以做到

<g:set var="something" scope="session"/>

但我认为我所描述的是你需要做的事情

如果您需要帮助用户会话详细信息,那么我很难轻易拿到它

但是当连接到套接字时从gsp我发送'${session.id}'然后我查找并绑定回用户.....

另请注意---这里有捕获,当用户未经过身份验证时,他们有主会话,当他们通过spring security进行身份验证时,他们实际上会获得一个新的会话ID。这是由于安全问题,但我已经通过检查我在登录时设置的session.username来解决这个问题,现在匹配在后端解密的'$ {params.encryptedUsername}}。

啊,它正在回滚..有一个包含username,session的并发hashmap,当我得到Decrypted.username时,我得到hashMap,其值是用户http会话,我用它来做...

我可以给你我的代码,但是上面的很多工作是以一种方式介绍它的步骤

所以回答你的问题,这是在grails 3: 在application.groovy

中启用Spring安全会话侦听器
grails.plugin.springsecurity.useSecurityEventListener = true

CustomSecurityEventListener.groovy类添加到您的应用中,删除loginCacheAttempt,除非您希望使用它,请参阅build.gradle以获取该演示应用中的内容和相关服务等。

然后调用同一文件夹中提供的SessionListener,并将具有会话ID的用户添加到SessionListener顶部声明的会话同步映射

当我注册用户时,现在在我的websockets中:

String sessionId = userSession.userProperties.get("sessionId") as String
                def userHttpsession = SessionListener.sessions.find{it.key==sessionId}?.value
userHttpsession.username = username
userHttpsession.password = password

这仍然是预身份验证和主要会话

我发送一个触发器告诉套接字将gsp页面刷新到另一个window.location.href

在该位置控制器操作中,我验证会话详细信息并使会话详细信息无效

registerService.authenticateUser(user, session.password)

这种做事方式看起来工作正常而没有复杂性,有一个加密用户作为初始套接字事务的一部分发送,以确保/验证session.user匹配加密用户(对于登录用户)

答案 1 :(得分:0)

似乎程序化登录也会处理会话。

if($request->ajax()){ $result = array( 'total_questions' => $x, 'responseText' => $e->getMessage(), ], 500); } echo json_encode($result);