up1 on December 25th, 2009

OAuth เป็น open standard สำหรับ APIs ของการ authentication ซึ่งจะทำให้ปลอดภัยและง่ายต่อการพัฒนาระบบงาน

โดยถ้าใครเคยใช้ web ที่มีการ authentication จาก twitter account แล้วนั้นจะเห็นหน้าจอเหล่านี้ ซึ่ง Twitter ก็เป็น OAuth Service Provider ที่ให้เราๆ ท่านๆใช้งานกัน และในบทความนี้ก็จะลองใช้ OAuth Service Provider ของ twitter เช่นกันครับ

oauth_twitter

oauth_twitter2

ถ้าอยากทำแบบนี้ใน Grails application บ้างล่ะ ?? ทำอย่างไร ซึ่งแน่นอนว่าใน Grails มี OAuth plugin ให้ใช้เช่นกัน ดังนั้นเรามาดูว่าใช้งานกันอย่างไร

ขั้นตอนการพัฒนา
1. สร้าง Grails application ชื่อ my_oauth ดังนี้
>grails create-app my_oauth

2. ติดตั้ง OAuth plugin ดังนี้
>cd my_oauth
>grails install-plugin oauth-plugin

หรือ ทำการ download OAuth plugin มา แล้วติดตั้งดังนี้

>grails install-plugin c:\my-path\grails-oauth-xxx.zip

3. ทำการ config ค่า parameters ต่างๆ ที่จำเป็นในการใช้งาน OAuth service provider ของ Twitter ใน file /conf/Config.groovy ดังนี้

oauth {
    twitter {
        requestTokenUrl="http://twitter.com/oauth/request_token"
        accessTokenUrl="http://twitter.com/oauth/access_token"
        authUrl="http://twitter.com/oauth/authorize"
        consumer.key="xxx"
        consumer.secret="yyy"
    }
}

คำถาม
ค่าของ consumer.key และ consumer.secret เอามาจากไหน ?

คำตอบ
เอามาจากการ register ใน twitter ตาม url นี้ http://twitter.com/oauth และทำการ register new application โดยจะมีแบบ form ให้ใส่ข้อมูลต่างๆ แล้วทำการ save ไปจะได้ consumer.key และ consumer.secret มานะครับ

ขั้นตอนการ Register เป็นดังรูป

oauth_twitter3

oauth_twitter4

4. สร้าง controller ชื่อ timeline ขึ้นมา เพื่อใช้สำหรับดึงข้อมูลจาก user timeline [ XML ] ใน twitter ดังนี้
>grails create-controller timeline

และแก้ไข code ใน file /grails-app/controllers/TimelineController.groovy ดังนี้

class TimelineController {
	def apiURL = "http://twitter.com/statuses/user_timeline.xml"
	def oauthService

	def index = {
		if (session.oauthToken == null) {
			redirect(uri:"/")
		}
		if (params?.apiURL)
			apiUrl = params.apiURL

		def response = oauthService.accessResource(apiURL, 'twitter', [key:session.oauthToken.key, secret:session.oauthToken.secret])
		def statuses = JSON.parse(response)
		render statuses;
	}
}

5. แก้ไข file /grails-app/views/index.gsp ดังนี้

<html>
    <head>
        <title>Welcome to Grails</title>
	<meta name="layout" content="main" />
    </head>
    <body>
		<div>
			<g:oauthLink consumer="twitter" returnTo="[controller:'timeline']">
				<h3>Login with</h3>
				<img src="${resource(dir:'images',file:'twitter-logo.png')}" width="155" height="36"
				    style="border: 0; float: left" />
			</g:oauthLink>
		</div>
    </body>
</html>

6. ทำการ run application ด้วยคำสั่ง
>grails run-app

และเข้าไปที่ http://localhhost:8080/my_oauth/ แล้วจะสามารถใช้งานดังรูป

oauth_twitter5

oauth_twitter6

oauth_twitter7

โดยสุดท้ายจะวิ่งไปทำงานตาม callback ทีี่กำหนดไว้ครับ ถือเป็นอันสำเร็จของการใช้งานแล้ว เพียงเท่านี้ก็สามารถใช้งาน OAuth service provider จาก Twitter ได้แล้วครับ

ที่มา
- OAuth Plugin
- Grails OAuth and LinkedIn APIs

Tags: ,

One Response to “ใช้งาน OAuth ใน Grails Application”

  1. เจ๋งไปเลยครับ .. อยากได้อยู่พอดี

Leave a Reply