2012-02-25 77 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