[Logo]
關於JForum忘記密碼流程的說明及小修改  XML del.icio.us HEMiDEMi funP 收進你的MyShare個人書籤 新增到udn共享書籤 plurk twitter 分享
Forum Index » JForum中文社群 JForum Chinese Users Community
Author Message
andowson

五段學員
[Avatar]

Joined: 2007-01-02 22:20:40
Messages: 510
Location: 台北
Offline

有關JForum忘記密碼的功能是正常的
剛測試了一下,它的運作流程大致如下
1.點選登入
2.點選忘記密碼
3.輸入原來註冊時所用的電子郵件信箱或會員名稱任何一個,然後按下確定。
4.JForum系統發送一封電子郵件至您當初註冊的電子郵件信箱,然後顯示一個完成畫面,請您點選某個連結回到登入頁面
=>最初註冊時填寫的電子郵件信箱必須正確否則您永遠收不到信
5.進入到您的電子郵件信箱,您會看到一封主旨為補發密碼通知的信件,裡面有一個URL,類似下方這樣:
http://www.andowson.com/user/recoverPassword/b5b466d022a4be46b9f4530cb7a212ce.page
6.將上面的網址複製並貼到原來瀏覽器視窗的網址列,然後按下Enter
7.再輸入一次您的原來註冊時填的電子郵件信箱及新的密碼兩次,按下確定
8.JForum確認無誤後,更改您的密碼,然後顯示一個完成頁面,請您點選某個連結回到登入頁面
=>上面通知信內的URL連結只能使用一次,如果日後您又忘記了,請重複一次上述流程
9.點選登入連結後,輸入帳號跟密碼,按下登入,然後...
出現404錯誤,找不到網頁?

原因是這個登入畫面裡面有個隱藏欄位returnPath,紀錄呼叫這個登入畫面的來源網址,以便在進行完帳號密碼驗證後導回去剛剛的地方。檢視畫面原始碼可以發現,這時變成如下:
<input type="hidden" name="returnPath" value="http://www.andowson.com/jforum.page" />
而原本JForum的設計, *.page 通通是交給 jforum 這個Controller Servlet來處理,但是如果沒有傳任何參數給它,就會變成moduleClass == null的條件成立,而預設是回傳404錯誤碼。我稍微改了一下JForum.java的service()方法,讓它導回根目錄:
			if (moduleClass == null) {
				// Module not found, send 404 not found response
				//response.sendError(HttpServletResponse.SC_NOT_FOUND);
				response.sendRedirect("/");
			}

如此一來,就OK了。

This message was edited 1 time. Last update was at 2008-12-15 12:48:44


分享經驗 累積智慧
[WWW] [MSN]
fly

九級學員

Joined: 2008-12-07 15:49:06
Messages: 11
Offline

谢谢你写得这么详细。

我每次进行完第7步后可以看到图片1,
然后进行第9步,得到图片2

我试验过很多次,我的操作应该没有问题
[Thumb - 2.jpg]
 Filename 2.jpg [Disk] Download
 Description No description given
 Filesize 8 Kbytes
 Downloaded:  7 time(s)

[Thumb - 1.jpg]
 Filename 1.jpg [Disk] Download
 Description No description given
 Filesize 9 Kbytes
 Downloaded:  8 time(s)

fly

九級學員

Joined: 2008-12-07 15:49:06
Messages: 11
Offline

smilie

This message was edited 1 time. Last update was at 2008-12-14 12:50:20

andowson

五段學員
[Avatar]

Joined: 2007-01-02 22:20:40
Messages: 510
Location: 台北
Offline

您的問題應該是因為帳號尚未啟用,所以無法通過登入驗證程序,主要是因為在net.jforum.sso.DefaultLoginAuthenticator這個類別的validateLogin方法裡面對於登入成功的條件是
		if (user != null && !user.isDeleted() && (user.getActivationKey() == null || user.isActive())) {
			return user;
		}

所以雖然透過忘記密碼功能可以成功修改密碼,但是如果您一直沒有去啟用帳號,則仍然無法登入成功。

分享經驗 累積智慧
[WWW] [MSN]
fly

九級學員

Joined: 2008-12-07 15:49:06
Messages: 11
Offline

andowson wrote:您的問題應該是因為帳號尚未啟用,所以無法通過登入驗證程序,主要是因為在net.jforum.sso.DefaultLoginAuthenticator這個類別的validateLogin方法裡面對於登入成功的條件是
		if (user != null && !user.isDeleted() && (user.getActivationKey() == null || user.isActive())) {
			return user;
		}

所以雖然透過忘記密碼功能可以成功修改密碼,但是如果您一直沒有去啟用帳號,則仍然無法登入成功。


谢谢提醒,我启用账号的时候需要验证码,“现在”我怎样得到验证码呢?
[Thumb - 未命名.jpg]
 Filename 未命名.jpg [Disk] Download
 Description No description given
 Filesize 11 Kbytes
 Downloaded:  7 time(s)

andowson

五段學員
[Avatar]

Joined: 2007-01-02 22:20:40
Messages: 510
Location: 台北
Offline

首先,JForum的手動啟用帳號中輸入的是會員ID(整數),不是會員名稱(字串),您的會員ID可以由會員列表前面第一行數字查得(即#那一行)。
第二,驗證碼在當初加入會員時,已發送通知信到您註冊時所使用的電子郵件信箱,如果當初您註冊用的信箱是正確的,您可以到您的信箱中再找找看有沒有那封信。
第三,如果當初註冊時沒收到啟用帳號通知信,目前這個版本的JForum也沒有提供補發驗證碼的功能,如果您比較偏好使用fly這個帳號,有幾種作法:
a.由系統管理者手動啟用帳號,這樣子您會有兩個帳號
b.由系統管理者變更您目前通過認證的這個帳號名稱為fly,將原來的fly改為別的名稱
c.開發補發驗證碼的程式,可以模仿忘記密碼的程式來改,然後您再去申請補發驗證碼,然後再來啟用帳號。目前想到的邏輯如下:
1.在手動啟用帳號的頁面上加入補發驗證碼連結,使用者按下後顯示申請表單畫面
2.使用者同時輸入帳號跟新的電子郵件信箱地址
3.系統檢查該帳號是否已啟用
3.1.如果尚未啟用,則更新該帳號的電子郵件信箱,同時產生新驗證碼,寄送至這個新的電子郵件信箱
3.2如果已啟用,則顯示帳號已啟用畫面(避免帳號被盜用)
4.使用者至其新的電子郵件信箱收信,收到信後再啟用帳號

這幾個作法的優缺點如下:
a方案:優點:簡單,目前系統所提供的功能。缺點:無法確認使用者所填寫之電子郵件信箱是否正確,失去驗證碼機制所要的目的。然後同一個人變成有兩個帳號。
b方案:優點:可以保留目前您這個帳號所發表的文章紀錄。缺點:就是要請系統管理者去處理這件事,還有原先的文章可能會看起來怪怪的。
c方案:優點:可以讓使用者自行處理這件事情。不需要系統管理者介入。也可以回收一些帳號。缺點:就是還要開發程式,需要考量所花的時間成本以及日後與新版本程式相容性的問題。還有就是同一個人還是有兩個帳號。

目前,我比較傾向使用b方案。不知道您是否同意這樣的處理方式?
[Thumb - user_id.jpg]
 Filename user_id.jpg [Disk] Download
 Description 會員ID
 Filesize 18 Kbytes
 Downloaded:  7 time(s)

This message was edited 1 time. Last update was at 2008-12-21 11:23:52


分享經驗 累積智慧
[WWW] [MSN]
fly

九級學員

Joined: 2008-12-07 15:49:06
Messages: 11
Offline

andowson wrote:首先,JForum的手動啟用帳號中輸入的是會員ID(整數),不是會員名稱(字串),您的會員ID可以由會員列表前面第一行數字查得(即#那一行)。
第二,驗證碼在當初加入會員時,已發送通知信到您註冊時所使用的電子郵件信箱,如果當初您註冊用的信箱是正確的,您可以到您的信箱中再找找看有沒有那封信。
第三,如果當初註冊時沒收到啟用帳號通知信,目前這個版本的JForum也沒有提供補發驗證碼的功能,如果您比較偏好使用fly這個帳號,有幾種作法:
a.由系統管理者手動啟用帳號,這樣子您會有兩個帳號
b.由系統管理者變更您目前通過認證的這個帳號名稱為fly,將原來的fly改為別的名稱
c.開發補發驗證碼的程式,可以模仿忘記密碼的程式來改,然後您再去申請補發驗證碼,然後再來啟用帳號。目前想到的邏輯如下:
1.在手動啟用帳號的頁面上加入補發驗證碼連結,使用者按下後顯示申請表單畫面
2.使用者同時輸入帳號跟新的電子郵件信箱地址
3.系統檢查該帳號是否已啟用
3.1.如果尚未啟用,則更新該帳號的電子郵件信箱,同時產生新驗證碼,寄送至這個新的電子郵件信箱
3.2如果已啟用,則顯示帳號已啟用畫面(避免帳號被盜用)
4.使用者至其新的電子郵件信箱收信,收到信後再啟用帳號

這幾個作法的優缺點如下:
a方案:優點:簡單,目前系統所提供的功能。缺點:無法確認使用者所填寫之電子郵件信箱是否正確,失去驗證碼機制所要的目的。然後同一個人變成有兩個帳號。
b方案:優點:可以保留目前您這個帳號所發表的文章紀錄。缺點:就是要請系統管理者去處理這件事,還有原先的文章可能會看起來怪怪的。
c方案:優點:可以讓使用者自行處理這件事情。不需要系統管理者介入。也可以回收一些帳號。缺點:就是還要開發程式,需要考量所花的時間成本以及日後與新版本程式相容性的問題。還有就是同一個人還是有兩個帳號。

目前,我比較傾向使用b方案。不知道您是否同意這樣的處理方式?


不好意思,最近由于身体原因没来上网。
我非常赞成使用b方案,这个dream1000的账号我不想要了,你给我改成fly吧,非常感谢你的热情
andowson

五段學員
[Avatar]

Joined: 2007-01-02 22:20:40
Messages: 510
Location: 台北
Offline

已修改為fly。也希望再見到您發表新文章。

分享經驗 累積智慧
[WWW] [MSN]
fly

九級學員

Joined: 2008-12-07 15:49:06
Messages: 11
Offline

andowson wrote:已修改為fly。也希望再見到您發表新文章。


谢谢 smilie
 
Forum Index » JForum中文社群 JForum Chinese Users Community
Go to:   

交換連結乌托邦博客 
在本站刊登廣告
練功房推薦書單
SCJP 6.0認證教戰手冊 (附光碟) 雲端策略:雲端運算與虛擬化技術 SCJP Java 6專業認證手冊 Java認證SCJP 6.0/5.0--猛虎出閘 SCWCD 5 猛虎出閘:Java Web 應用程式專業認證 SCWCD專業認證手冊 Head First Servlets and JSP
[版權說明] 本站授權方式:創用CC 姓名標示-非商業性-相同方式分享 3.0 台灣 授權條款
Creative Commons License
Powered by JForum 2.2.0 © JForum Team