第十章 从社交服务认证

    ActFramework 核心库并没有提供社交服务认证的工具, 而是通过 SocialLink 插件来帮助应用实现这个功能. 使用 SocialLink 插件的办法是在项目的 文件中加入依赖:

    小提示 如果使用了 act-starter-parent 作为项目的 parent, 则无需提供 <version>${act-social-link.version}</version>

    目前 SocialLink 插件提供了一下几种社交服务的集成:

    • Google
    • Facebook
    • GitHub
    • LinkedIn

    注意 每个社交服务注册页面中都有 origin 和 redirect URL 的设置, 其中的 origin 需要设置请求发起的站点名, 例如:

    1. https://myapp.mycom.com

    而 redirect URL 则需要设置为下面的方式:

    上面的 provider-id 可以是:

    • google
    • facebook
    • github
    • linkedin
    1. #
    2. # Twitter
    3. #
    4. social_link.twitter.key=your_consumer_key
    5. social_link.twitter.secret=your_consumer_secret
    6. #
    7. # Facebook
    8. #
    9. social_link.facebook.key=your_client_id
    10. # this scope is the minimum SecureSocial requires. You can add more if required by your app.
    11. social_link.facebook.scope=email
    12. #
    13. # GitHub
    14. #
    15. social_link.github.key=your_consumer_key
    16. social_link.github.secret=your_consumer_secret
    17. #
    18. # Google
    19. #
    20. social_link.google.scope=openid email profile
    21. social_link.google.key=your_consumer_key
    22. social_link.google.secret=your_consumer_secret
    23. #
    24. # LinkedIn
    25. social_link.linkedin.scope=r_emailaddress r_basicprofile
    26. social_link.linkedin.key=your_consumer_key
    27. social_link.linkedin.secret=your_consumer_secret

    使用 SocialLink 的方法很简单:

    1. 页面上需要提供社交服务认证链接
    2. 后端应用提供处理用户 profile 的逻辑

    所有社交服务都使用相同的社交认证链接:

    上面的 provider-id 可以是:

    • google
    • facebook
    • github
    • linkedin
    1. <ul id='social-links'>
    2. <li>
    3. <a href='/~/social/start?provider=google'><img src='/asset/img/social/google.gif'></a>
    4. </li>
    5. <li>
    6. <a href='/~/social/start?provider=facebook'><img src='/asset/img/social/facebook.gif'></a>
    7. </li>
    8. <li>
    9. <a href='/~/social/start?provider=github'><img src='/asset/img/social/github.gif'></a>
    10. </li>
    11. <li>
    12. <a href='/~/social/start?provider=linkedin'><img src='/asset/img/social/linkedin.gif'></a>
    13. </li>

    10.3.2 处理用户的社交 Profile

    当用户点击上节中讲到的社交链接之后, SocialLink 会向社交服务发起 OAuth 认证请求, 触发一系列交互过程, 包括用户在社交网上的登录以及认证确认. 这一系列操作都无需应用介入. 但认证最终结束之后 SocialLink 将会拿到用户的 Social Profile, 并触发一个 SocialProfile.Fetched 事件, 应用需要侦听该事件并完成用户登录. 下面是处理该事件的示例代码: