Drupal 8 提供Oauth2登陆服务端

Drupal 8提供类似微信、Google这样的登陆服务端,将账号在服务器登陆然后获取用户信息.

1. 安装配置simple_oauth, 并且创建一个客户端账号,配置回调的url
2. 前端当点击登陆以后直接跳转到这个URL. 请替换其中的myappid和state(随机字符串可以是时间戳). http://www.mysite.com/oauth/authorize?client_id=myappid&response_type=code&scope=api&state=123
3. 这时在上面配置回掉的url中会获取到一个?code的参数。再根据code去获取Access Token

POST http://www.mysite.com/oauth/token
Args:
array(
   'redirect_uri' => http://www.myclient.com/callback
   'code' => $_GET['code'],
   'grant_type' => 'authorization_code',
   'client_id' => 'df13baf2-7cd8-4aee-bc2b-326910b6a8c0',  ### need change
   'client_secret' => 'abcd',  ### need change.
);

4. 最后通过Access token获取用户信息, 以前API为我自己自定义的API。返回当前登陆用户名。

return ['您的登陆账户为:' . \Drupal::currentUser()->getUsername()];

Drupal 8定义一个block

http://drupal.org/node/1880620
blocks在drupal8已经变成了一个插件(plugin)形式.
Block types现在被定义为block plugins 而不是hook_block_info().。
blocks 现在支持多个block接口, 所以同一个block可以在主题多次使用. 每个block都有自己的配置并可以删除。
TODO:

API 的改变

hook_block_info()已经被删除 Block types 现在被新增加的 block plugin定义.
hook_block_info_alter(已经被删除。这个新的 hook_block_alter() 应该取而代之的被利用hook_block_configure(), hook_block_save(), and hook_block_view() 已经被 block plugin 的方法代替了.。
hook_block_list_alter()已经被删除, Modules 能够改变block 的可视性通过实施hook_block_access()来代替。
hook_block_MODULE_DELTA_alter()已经被 hook_block_ID_alter() an和hook_block_NAME_alter().取代。

案例

定义block 类型

将MyBlock.php plugin这个类文件放在下面这个目录中, Drupal 会自动判断它是一个block的插件:

my_module/lib/Drupal/my_module/Plugin/Block

(请看标准类加载),当启用my_module时, 这个插件类文件会被自动引用