我在grails中的不同控制器中进行身份验证?

时间:2013-07-25 08:20:31

标签: grails controller

所以我使用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.

1 个答案:

答案 0 :(得分:0)

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