在grails中的不同控制器中进行身份验证?
因此,我成功地登录了grails应用程序。 但是我想把一些函数分成不同的控制器 例如:在grails中的不同控制器中进行身份验证?,grails,controller,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
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有什么原因吗?从您的示例中可以看出,您正在以纯文本形式存储密码。如果你想拥有一个安全的应用程序,你真的不应该自己做这件事。好吧,詹姆斯,这只是一个模型。我对整个圣杯都不熟悉,所以谢谢你的建议,我来看看。