【问题标题】:having my authentication in a different controller in grails?在 grails 的不同控制器中进行身份验证?
【发布时间】:2013-07-25 08:20:30
【问题描述】:

所以我成功登录了我的 grails 应用程序。 但我想将一些功能分离到不同的控制器中。

示例:

package MyApp

class CustomerController {

/*Keeping the scaffold for admin purposes.*/   
static scaffold = Customer

//write redirects and make exceptions for scaffolds
//  def index() { }  

/*
 * Access controllers are ordered after application flow. 
 **/

def login(){    
}

/*
 * Authentication based on email adress as the identifier.
 * 
 **/
def authenticate() {
    def authPwd 
    def authUser

    if(User.findByEmail(params.email) == null){

      flash.message = "login failed"
      redirect(action: "login")

    }else{
        authUser = User.findByEmail(params.email)
        authPwd = authUser.getPassword()        

        if(authPwd == params.pwd){
            session["user"] = authUser
            session["customer"] = authUser.getCompany()

            println "current user is: " + session["user"]
            println "current customer is: " + session["customer"]

            redirect(controller: "portal", action: "start")
        }else{
            flash.message = "login failed"
            redirect(action: "login")
        }
    }
}

def logout() {
    session.invalidate()
    redirect(action: "login")
}

}

所以我想要做的就是把 authenticate() 从这里拿出来,放到一个叫做 AuthenticateController() 的新控制器中

只是,作为 grails 的新手,我的重定向不起作用,我希望有人能给我一个想法。

所以我以为你会拿出来

def authenticate {
/* some code*/
}

将其放入新的控制器中。然后只需使用

redirect(controller: "authenticate", action: "authenticate")

但这不起作用,我得到一个错误异常。

任何帮助将不胜感激

编辑:出于以下评论的目的...

class CustomerController {

/*Keeping the scaffold for admin purposes.*/   
static scaffold = Customer

//write redirects and make exceptions for scaffolds
//  def index() { }  

/*
 * Access controllers are ordered after application flow. 
 **/

def login(){  
    redirect(controller:"authenticate", action:"authenticate")
}

/*
 * Authentication based on email adress as the identifier.
 * 
 **/


def logout() {
    session.invalidate()
    redirect(action: "login")
}

}

然后是 AuthenticateController

class AuthenticateController {

def authenticate() {
    def authPwd 
    def authUser

    if(User.findByEmail(params.email) == null){

      flash.message = "login failed"
      redirect(contoller:"customer", action: "login")

    }else{
        authUser = User.findByEmail(params.email)
        authPwd = authUser.getPassword()        

        if(authPwd == params.pwd){
            session["user"] = authUser
            session["customer"] = authUser.getCompany()

            println "current user is: " + session["user"]
            println "current customer is: " + session["customer"]

            redirect(controller: "portal", action: "start")
        }else{
            flash.message = "login failed"
            redirect(contoller:"customer", action: "login")
        }
    }
}
}

是代码不起作用。基本上是复制粘贴。

Tomcat 运行但首先出现 100 个错误

type Status report

message /ClipEdit_v1/authenticate/login

description The requested resource is not available.

【问题讨论】:

  • 所以您发布了有效的代码,但没有发布无效的代码,或者您收到的错误?
  • 好的,我加了,讽刺也没有用
  • 您没有使用 Spring Security 有什么原因吗?从您的示例看来,您正在以纯文本形式存储密码。如果你想拥有一个安全的应用程序,你真的不应该自己做这件事。
  • 好吧,詹姆斯,这只是一个模型。我是整个 grails 的新手,所以感谢您的建议,我会看看。

标签: grails controller


【解决方案1】:

我自己修好了。只是将我的表单发布到身份验证控制器,然后如果失败则重定向回登录。

【讨论】:

    猜你喜欢
    • 2014-07-08
    • 2020-11-05
    • 2023-03-22
    • 2013-03-31
    • 2016-08-13
    • 2020-06-04
    • 2014-06-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多