From 66e74a3dd32506fcd97eb6d2614a5cad994a23db Mon Sep 17 00:00:00 2001 From: Alexandre Jasmin Date: Mon, 31 May 2010 22:06:08 -0400 Subject: [PATCH] Add screenshot and README file. --- README.md | 33 +++++++++++++++++++++++++++++++++ screenshot.png | Bin 0 -> 20052 bytes 2 files changed, 33 insertions(+) create mode 100644 README.md create mode 100644 screenshot.png diff --git a/README.md b/README.md new file mode 100644 index 0000000..d2f36bb --- /dev/null +++ b/README.md @@ -0,0 +1,33 @@ +Seam OpenID sample moded for accessing user attributes +------------------------------------------------------ + +This is an OpenID sample from the [Seam Framework][1] modified so as to automatically +retrieve user attributes during the sign-on process. + +The main component of this sample is the OpenIdAx class (a sightly modified +version of the [OpenId class][2] in Seam). + +OpenIdAx use the attribute exchange mechanism to obtain the +*email address*, *first name*, *last name* and *full name* from the user's OpenID provider. +Though each provider only support a subset of these attributes. + +The application UI was also changed to display more information about the active user +and to sign the Wall Posts with the poster *name* and *email address* if they're available. + +![Screenshot](http://github.com/ajasmin/seam-openid-with-name-and-email/raw/master/screenshot.png) + +The old openid4java jar file included in the 2.2.0.GA Seam distribution was also replaced +by a newer 0.9.5.593 version because the original had a number of issues. + +To build this sample: + +- edit build.xml to add jboss.home +- cd examples/openid +- ant explode + +This project was motivated by a [Stackoverflow question][3] + + + [1]: http://seamframework.org/ + [2]: https://anonsvn.jboss.org/repos/seam/branches/community/Seam_2_2/src/main/org/jboss/seam/security/openid/OpenId.java + [3]: http://stackoverflow.com/questions/2936340/get-email-address-from-openid-using-jboss-seam diff --git a/screenshot.png b/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..b5c6766c955e6d23fc8624690daaf0234464dafc GIT binary patch literal 20052 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