所以我使用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.
答案 0 :(得分:0)
我自己修好了。只是将我的表单发布到身份验证控制器,然后重定向回登录,如果失败。