2012-02-25 83 views
1

我是Grails 2.0框架中的初学者,我正在尝试遵循本教程http://grails.org/Simple+Avatar+Uploader。我实现了这个代码,但是我在UserController.groovy的这一行'def user = User.current(session)'中得到了一个错误,就像'没有这样的属性:class for user:grailtwitter.PersonController'我假设这行代码是用户当前会话。我正在寻找解释这是如何工作的?Grails中的当前会话

回答

1

此代码不完整。控制器的前提是您有一种识别当前登录用户的方式。隐含地,行def user = User.current(session)假定您已在用户类本身上定义了一个current()方法,该方法接收会话并假定使用您在其中设置的某个字段来检索用户。那会很愚蠢。

执行此操作的常用方法是构建您自己的身份验证机制。请注意,这是一个天真的做法,你是好得多使用Spring Security Core除非你想让你的应用程序打开空洞的安全漏洞。但是,对于实践中,像这样:

def login = { 
    //if you're stupid enough to store your passwords in plain text and not sanitize user inputs, you deserve to be hacked 
    def user = User.findByPassword(params.password) 
    if(user){ 
     session.user = user 
    } 
} 

然后,您可以替换教程违规线( - def user = User.current(session) - )与

def user = session.user ?: new User(userid:"I'm a little teapot") 

你走得更远之前,你可能想在更进一步之前,先通过这个free eBook on Grails。也强烈推荐Grails in Action

0

当我遇到过去这是因为我没有导入类,Grails/Groovy认为我试图访问一个名为User的变量而不是类中的方法。

+0

什么样的数据'当前(会话)'持有? – Srivi 2012-02-25 22:30:43

+0

User类是什么包?如果它不在grailtwitter包中,那么你需要导入。 – proflux 2012-02-25 22:31:46

+0

好..我是进口包。现在我得到了不同的错误,如下所示:“没有方法的签名:org.grails.twitter.User.current()适用于参数类型:(org.codehaus.groovy.grails.web.servlet.mvc.GrailsHttpSession)values: [会话内容:org.codehaus.groovy.grails.FLASH_SCOPE = org.codehaus ............' – Srivi 2012-02-25 22:47:17