Simple Login Th
-
Upload
moniguna -
Category
Self Improvement
-
view
2.767 -
download
3
description
Transcript of Simple Login Th
Grails tutorialSimple login/logout
http://khomkrit.wordpress.com
Part I
สราง View
เริ่มตนสรางโปรเจคใหม
> grails create-app simple-login
สราง controller ชื่อ user สำหรับจัดการเรื่องของ
การ login และ logout
> grails create-controller user
สรางไฟลชื่อ “index.gsp” ไว∙ี่
grails-app/views/user/ Directory
เริ่มตน
สรางหนา Loginแกไขไฟล “index.gsp” ∙ี่เราสรางไวดังนี้
สราง form สำหรับกรอก
username และ password
เพิ่ม style
แกไขไฟล “index.gsp” ∙ี่เราสรางไวดังนี้
สรางหนา Login
สราง form โดยใช <g:form> แ∙็ก
สรางหนา Login
ถาไมอยากใช <g:form> แ∙็ก เราก็สามารถใช HTML
form ธรรมาดาๆได เพราะสุด∙ายแลว Grails ก็จะ
สราง HTML form จาก <g:form> ใหเราอยูดี
<g:form> แ∙็ก บอกอะไร∙ี่มีความหมายชัดเจนกวา เชน
บอกวา action ∙ี่จะรับ request ชื่อวาอะไร
<g:form action=”login”/>
สรางหนา Login
สง request ไป∙ี่ action ชื่อ “login”
แลวสงไป∙ี่ controller ไหนละ? ถาเราไมกำหนดชื่อ
controller Grails จะสราง form ∙ี่สง request ไป
∙ี่ controller ∙ี่สอดคลองกับ∙ี่อยูของไฟลให
ตอนนี้ index.gsp อยูใน /grails-app/user/
directory ดังนั้นมันจะสง request ไป∙ี่ user
controller
<g:form action=”login”/>
สรางหนา Login
อยางไรก็ตาม เราก็ยังกำหนดชื่อ controller
∙ี่เราจะสง request ไปเองไดเชนกัน
<g:form controller=”user” action=”login”/>
สรางหนา Login
เริ่ม Grails Application โดยใชคำสั่งนี้
> grails run-app
เบราซไป∙ี่ http://localhost:8080/simple-login/user
ตอนนี้เรายังไมสามารถ∙ำอะไรกับ form ได และ
เมื่อกดปุม Login ก็จะโดน Grails ดากลับมา
เพราะวา action ∙ี่เรากำหนดไวกอนหนายังไมได
ถูกสรางขึ้นมา
action ไหนละ∙ี่เรากำหนดไวกอนหนานี้?
กลับไปดู∙ี่ไฟลชื่อ login.gsp เราจะเห็น action ∙ี่เรา
กำหนดไว มันชื่อวา “login”
action ชื่อวา “login” จะรับ
request จาก form นี้
Part II
สราง Action
Tip
เราสามารถ แกไข, เชนแกไข domain และ
แกไข controller ได, โดยไมจำเปนตอง
restart web server ใหม
แตบาง∙ีก็ตองการการ restart web server
เชน การสราง controller และ action หรือ
แมแตการแกไข domain ใหม
สราง action
ปกติ∙ุกๆ action จะถูกสรางไวใน controller ใน
กรณีนี้เราตองการสง request ไป∙ี่ controller ชื่อ
user และ action ชื่อ name
ดังนั้นเปดไฟลชื่อ UserController.groovy เพื่อสราง
action ชื่อวา login
แกไข controller
ปกติ∙ุกๆ controller จะอยูใน
/grails-app/controllers/
แกไข controller
เปดไฟล UserController.groovy
แลวสราง action ชื่อ “login”
แกไข controller
ไป∙ี่ http://localhost:8080/simple-login/user/ อีกครั้ง
แลว∙ดลอง login ดู
แกไข controllerพบวา Grails ตอบ 404 กลับมา! ∙ำไม?
โดยปริยายแลว เมื่อเราเรียก action ใดๆก็ตาม Grails
จะพยายามหาไฟล∙ี่มีชื่อสอดคลองกับ action
ในกรณีนี้เราสง request ไป∙ี่ http://localhost:8080/
simple-login/user/login, หมายความวาเราพยายาม
เรียก action ชื่อ “login” ∙ี่อยูใน user controller
ดังนั้น Grails จะพยายามหาไฟลชื่อ “login.gsp” ใน /
grails-app/views/user/ เพื่อ∙ี่จะ render กลับไป
แตตอนนี้เรายังไมมีไฟลนี้!
แกไข controllerเรายังไมมีไฟลชื่อ login.gsp ∙ำให Grails ไมรูวาจะ
render อะไรกลับไปให client ดี
เราสามารถใช method ชื่อ “render” เพื่อบอก
Grails วาจะให render อะไรกลับไปให client
แกไข controller
ไป∙ี่ http://localhost:8080/simple-login/user/ อีกครั้ง
จากนั้นลอง login ดู
แกไข controller
Grails ไมบนกลับมาแลว :)
แกไข controller
กำหนด logic
บางอยางไวตรงนี้
เราสามารถเพิ่ม logic สำหรับจัดการการ login ได
ตรงนี้ เชนการเก็บสถานะการ login ไวใน session
และสงขอความอะไรบางอยางกลับไปให client
Part III
เพิ่ม logic สำหรับจัดการ
การ login
ตรวจสอบการ loginเพิ่มการตรวจสอบความถูกตองของการ login อยางงายๆ
parameter ∙ุกตัว∙ี่ถูกสงมาจะถูกเก็บไวในตัวแปรชื่อ
“params” ดังนั้น code ก็นาจะออกมาหนาตาลักษณะนี้
ตรวจสอบการ login
ลอง∙ดสอบโดยการพยายาม login อีกครั้ง
ถา username เปน “admin” และ password
คือ “pass” เราก็จะสามารถ login ได แตถา
เปนอยางอื่นก็จะ login ไมได
ตรวจสอบการ login
ตอไป หลังจาก∙ี่ user login เสร็จแลว Grails จะ
redirect user ไป∙ี่หนา login อีกครั้ง (/user/
index) และบอกอะไรบางอยางโดยใชตัวแปร “flash”
เกี่ยวกับ flash โดยละเอียดนั้นจะไมพูดใน แตก็สังเกต
ไดวา flash มันจะนำมาใชในลักษณะไหน ในหนาตอๆ
ไป
การใช flashใชตัวแปร flash เก็บคาอะไรบางอยางไวแบบนี้ จาก
นั้น redirect ไป∙ี่หนาสำหรับ login (index.gsp)
อีกครั้ง
การใช flash
การ redirect ไป∙ี่ action ชื่อ “index” โดยปกติ
Grails จะคนหาไฟลชื่อ “index.gsp” ใน grails-app/
views/user/ directory.
flash message ∙ี่เรากำหนดไวก็จะถูกสงไปให action
ชื่อ “index” และไฟล index.gsp ใหสามารถเขาถึงและ
นำมาใชได
การใช flashเพิ่ม ${flash.message} ในหนา login ถามัน
มีคาอะไรบางอยาง คานั้นจะถูกแสดงออกมา
สำหรับการแสดงคาในตัวแปรเราสามารถเขียน
ไดในลักษณะนี้ ${ชื่อตัวแปร}
การใช flash∙ดสอบโดยพยายาม login อีกครั้ง
หลังจากพยายาม login แลว เราจะเห็น flash
message แสดงออกมา
เก็บสถานะ
เราสามารถใช “session” ในการเก็บขอมูล
เกี่ยวกับการ login ไดในลักษณะนี้
จัดการการ Logoutสราง action ใหมชื่อ “logout” สำหรับจัดการการ logout
เราอาจตองเคลียรคาใน session.user เมื่อมีการ
logout
แกไขหนา Loginเพิ่ม logic มากกวานี้โดยตรวจสอบวาถา user login
แลวจะไมเสดงฟอรมสำหรับ login อีก และใหแสดง link
สำหรับ logout แ∙น
ใช <g:if>, <g:else> แ∙็กสำหรับตรวจสอบบางอยาง
แกไขหนา loginการใช <g:if> แ∙็ก
<g:if test=”${boolean-logic}”>
<g:if test=”${5 == 6}”>
ตัวอยาง:
แกไขหนา login
เราสามารถใช <g:link> แ∙็กเพื่อสราง link
สำหรับการ logout
<g:link controller=”” action=””>
<g:link action=””>
ถาเราไมกำหนดชื่อของ controller Grails จะคนหา
controller เชนเดียวกับพฤติกรรมตอนใช <g:form>
แกไขหนา loginแนนอนวาเราสามารถใช HTML แ∙็ก <a href=””>
แ∙นได แตแนะนำใหใช <g:link> ดวยเหตุผลเดียวกับ
∙ี่วา∙ำไมตองใช <g:form>
Check Point!ตอนนี้เราสรางหนาสำหรับ login ไดแลว
ถา login สำหร็จเราจะเห็น link สำหรับ logout
และ form สำหรับ login จะหายไป
ถา login ไมสำเร็จ form สำหรับ login ก็ยังอยู
หลังจากพยายาม login แลว เราจะเห็น flash
message เสมอ
เพิ่มอะไรบางอยางโปรเจค∙ี่สรางดวย Grails จะมีไฟล CSS มา
ใหใช และถูก include ใชโดยอัตโนมัติ
ลองใช CSS∙ี่มากับ Grails
class=”message”
ดูดีขึ้นกวาเดิม สำหรับการแสดงคาของ
flash.message
เพิ่มอะไรบางอยาง
สำหรับ style แบบอื่นๆ สามารถดูเพิ่มได∙ี่ /web-app/
css/
resource อื่นๆ∙ี่มีอยูแลวก็เชนกัน สามารถดูเพิ่ม
ได∙ี่ /web-app/images/ และ web-app/js/
เพิ่มอะไรบางอยาง
หัวขอตอไปLayout และ template
Filter
Tag Library
Service
URL Mapping
Thank You
Font: 2005_iannnnnGMO - http://www.f0nt.com