服务3.4的新用户注册序列? -- 7 领域 和 users 领域 和 services 领域 drupal 相关 的问题

New User Registration Sequence for Services 3.4?


6
vote

问题

中文

此评论概述了使用新的CSRF令牌登录的工作方式:

  1. 帖子到/休息/用户/登录(标题中没有任何内容)。从会话名称+ ID构建$ cookie + ID
  2. 访问/服务/会话/令牌(在标题中包含$ cookie)。保存$令牌返回。
  3. 在后续请求的标志中包含$ cookie和$令牌。

即使第一篇文章发生而不发送令牌,序列也会起作用。 (文档表明令牌应用于任何帖子请求,在这种情况下不起作用。)

是什么是 http请求 register 的新用户帐户?我正在寻找什么要求在哪个订单 - 不是实施代码。

更新:要清除,我不是在寻找 login 序列。我需要一系列请求(类似于上面的登录示例),允许新用户 *register* 他们的帐户。

系统/连接尝试失败:

 1.获取:服务/会话/令牌  2.帖子:系统/连接       内容类型:应用程序/ JSON       接受:应用/ JSON  3.帖子:用户/注册       内容类型:应用程序/ JSON       接受:应用/ JSON       x-csrf-token:[令牌]       cookie:[session_name] = [sessid]       身体: {                "姓名" :"drupalspec0rvzswau" ,                "通过" :"pyksitfk" ,                "邮件" :"drupalspec0rvzswau@drupalspec.com"        } 

Drupal用户是正确创建的,但步骤3中的请求。超时。

英文原文

This comment outlines a working way to login with the new CSRF token:

  1. POST to /rest/user/login (nothing in headers). Construct the $cookie from session name + id
  2. GET to /services/session/token (include $cookie in the headers). Save the $token returned.
  3. Include $cookie and $token in the headers of subsequent requests of a logged in user.

That sequence works even though the first POST happens without sending the token. (The documentation suggests that the token should be used for any POST requests, which does not work in this case.)

What is a working sequence of HTTP requests to register a new user account? I'm looking for what requests to make in what order - not implementation code.

UPDATE: To be clear, I'm not looking for the login sequence. I need a sequence of requests (similar to login example above) that allow a new user to *register* their account.

Failed Attempt with system/connect:

 1. GET:services/session/token  2. POST:system/connect       Content-Type: application/json       Accepts: application/json  3. POST:user/register       Content-Type: application/json       Accepts: application/json       X-CSRF-Token: [token]       Cookie: [session_name]=[sessid]       Body: {                "name":"drupalspec0rVzsWAU",                "pass":"PYKSItFK",                "mail":"drupalspec0rVzsWAU@drupalspec.com"       } 

The Drupal user is created correctly, but the request in step 3. times out.

        

回答列表

5
 
vote
vote
最佳答案
 

编辑:要解决问题的变更

我正在寻找什么要求在哪个订单 - 不是实施代码

您可以安全地忽略以下实际代码实现 - 请求的顺序保持不变。事实上,与原始问题完全相同。

如果您已经在您概述的顺序中提出了请求,则您无需执行更多,除非提供实际实现。我将把代码作为一个例子留下,所以你可以看到需要做好请求的顺序。我陷入了一些编号,使其更加明显;请求由1,2&amp表示。 3.


这是一个基本的PHP(即非DRUPAL)示例...

首先,为发送您的请求进行通用功能:

  function send_request($url, array $post_array = array(), $cookie = NULL, $token = NULL) {   $ch = curl_init();    curl_setopt($ch, CURLOPT_URL, $url);   curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);   curl_setopt($ch, CURLOPT_USERAGENT, 'googlebot');   //curl_setopt($ch, CURLOPT_VERBOSE, $post_array);    if (!empty($post_array)) {     curl_setopt($ch, CURLOPT_POST, 1);     curl_setopt($ch, CURLOPT_POSTFIELDS, $post_array);   }    if ($cookie) {     curl_setopt($ch, CURLOPT_COOKIE, $cookie);   }    if ($token) {     curl_setopt($ch, CURLOPT_HTTPHEADER, array('X-CSRF-Token: ' . $token));   }    $result = curl_exec($ch);   curl_close($ch);    return $result; }   

1 。然后首次调用登录用户:

  // Login. $data = array(   'username' => 'user',   'password' => 'password', );  $result = send_request("http://server/endpoint/user/login.json", $data);  try {   $result = json_decode($result); } catch (Exception $e) {   die('Login failed: ' . $e->getMessage()); }   

next获取会话名称和ID,创建cookie字符串以发送后续请求:

  $session_id = $result->sessid; $session_name = $result->session_name;     $cookie = $session_name . '=' . $session_id;   

2 。然后获取一个CSRF令牌,确保沿着cookie沿:

  $token = send_request("http://server/services/session/token", array(), $cookie);   

3 。最后,您可以对您实际感兴趣的端点执行您的请求。Cookie和令牌由send_request()函数注入。

  $user = array(   'mail' => 'test@test.com',   'name' => 'name',   // Other relevant properties/fields. );  $result = send_request('http://server/endpoint/user', $user, $cookie, $token);   

我没有测试用户创建端点,以便可能不是它所需的确切结构,但检查错误的响应应该让您完全清楚地知道它是什么。我从你的问题中获得了瞩目的印象,即你主要对导致最后一个请求的步骤感兴趣。

以上是从我使用的基本测试脚本调整的,对于您需要在那里添加更多错误/ Sanity检查的生产环境。并且功能正常在课堂上呼叫,并扩展到支持/删除,但我会将其留给您:)

 

Edit: to address the change in the question

I'm looking for what requests to make in what order - not implementation code

You can safely ignore the actual code implementation below - the order of the requests remains the same. In fact, exactly the same as in your original question.

If you're already making requests in the order that you've outlined, you needn't do anything more except provide an actual implementation. I'll leave the code in as an example, and so you can see exactly what order the requests need to be made in. I've stuck some numbering in to make it more obvious; the requests are denoted by 1, 2 & 3.


This is a basic PHP (i.e. non-Drupal) example...

First off make a generic function for sending your requests:

function send_request($url, array $post_array = array(), $cookie = NULL, $token = NULL) {   $ch = curl_init();    curl_setopt($ch, CURLOPT_URL, $url);   curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);   curl_setopt($ch, CURLOPT_USERAGENT, 'googlebot');   //curl_setopt($ch, CURLOPT_VERBOSE, $post_array);    if (!empty($post_array)) {     curl_setopt($ch, CURLOPT_POST, 1);     curl_setopt($ch, CURLOPT_POSTFIELDS, $post_array);   }    if ($cookie) {     curl_setopt($ch, CURLOPT_COOKIE, $cookie);   }    if ($token) {     curl_setopt($ch, CURLOPT_HTTPHEADER, array('X-CSRF-Token: ' . $token));   }    $result = curl_exec($ch);   curl_close($ch);    return $result; } 

1. Then make your first call to log the user in:

// Login. $data = array(   'username' => 'user',   'password' => 'password', );  $result = send_request("http://server/endpoint/user/login.json", $data);  try {   $result = json_decode($result); } catch (Exception $e) {   die('Login failed: ' . $e->getMessage()); } 

Next get the session name and ID, creating your cookie string to send with subsequent requests:

$session_id = $result->sessid; $session_name = $result->session_name;     $cookie = $session_name . '=' . $session_id; 

2. Then get a CSRF token, making sure to pass the cookie along:

$token = send_request("http://server/services/session/token", array(), $cookie); 

3. Finally you can perform your request to the endpoint you're actually interested in. The cookie and token are injected by the send_request() function.

$user = array(   'mail' => 'test@test.com',   'name' => 'name',   // Other relevant properties/fields. );  $result = send_request('http://server/endpoint/user', $user, $cookie, $token); 

I haven't tested the user creation endpoint so that might not be the exact structure it needs, but checking the responses for errors should let you know exactly what it's after quite quickly. I get the impression from your question that you're mainly interested in the steps leading up to that last request anyway.

The above is adapted from a basic test script I use, for a production environment you'll want to add more error/sanity checking in there. And the functionality is crying out to be wrapped in a class, and be extended to support PUT/DELETE, but I'll leave that to you :)

 
 
         
         

相关问题

0  drupal 6中的drupal_root和file_directory_path()之间有什么区别?  ( What is the difference between drupal root and file directory path in drupal 6 ) 
我想要一个替代的 file_directory_path() 在drupal 7中弃用。我得到了 file_default_schema() 的替代方案。 DRUPAL_ROOT 和 file_directory_path() 或 DRUPAL_ROOT 和 file_default_schema() ? ...

1  块配置的令牌仅限列表  ( Tokens in blocks configuration for list only pages ) 
我希望仅为某个路径设置一个块,使用登录的用户ID,如my-path / [用户:uid]。我觉得我应该能够做到这一点。 如何这样做? ...

0  表单按钮重定向到。inc模块文件  ( Form button redirecting to inc module file ) 
我正在构建一个自定义模块,我想添加一些按钮,将用户重定向到单击其他.inc文件中。 我的想法是这样的,在我的 mymod.user.inc 文件:中 if ($form_state['storage']['step'] === 1) { $form['button']['addnew_form'] = arr...

8  在AJAX回调中调用自定义JS函数?  ( Invoke custom js function in ajax callback ) 
可以在Ajax回调中调用自定义JS函数吗? function MY_MODULE_ajax_callback() { // Define a new array to hold our AJAX commands. $ajax_commands = array(); // Create a new ...

4  如何在垂直标签内主题表?  ( How to theme table inside vertical tabs ) 
我有一个简单的测试模块: function tabletabs_menu() { $items['tabletabs'] = array( 'title' => 'Table Tabs', 'page callback' => 'drupal_get_form', 'page argu...

1  面板+视图+分类系统深度问题  ( Panel views taxonomy depth problem ) 
遵循本教程我创建了分类术语的面板页面,以显示与分类学术语相关的所有内容和工作。 但我需要在与URL和儿童中的分类术语相关的所有节点中。 因此,我索取分类学术语ID Contex过滤器,具有分类学期ID(深度),不再工作--.- 这是Contex筛选器的设置 如果我在视图页面[将"分类名称" 为参数中尝试此视图块...

-5  如何在日常基础上显示节点  ( How to display nodes in order on a daily base ) 
我想用视图显示特定内容类型的节点。 我希望基于节点ID和节点每天按顺序显示一个节点。 ...

5  如何发送和接收Privatemsg?  ( How do i send and receive privatemsg ) 
我正在使用 services 使用Drupal 7,我建立了一个休息服务,我也包括在内 privatemsg 模块和实体API 模块。 我可以在我的服务下看到一个名为 entity_privatemsg_message 它只能检索和索引作为操作。 我还发现了一个PM_Service在这里有一些方法支持Drupal线程...

0  安装配置文件:$ install_state ['task_not_complete'] = true似乎没有工作  ( Installation profile install statetask not complete true doesnt seem to ) 
我需要在安装配置文件的最后一步中设置多个用户。我的想法是创建一种形式,如 form_example_tutorial_9 但每次单击add_teammember按钮时,我的表单就会提交并转到最后一个任务,显示链接"访问您的网站" 。虽然已创建的用户我无法再次显示表格才能添加其他团队成员 所以这里是我的代码.pro...

0  Ajax不为主题形式工作  ( Ajax not working for themed form ) 
我有一种我想要用模板文件主题的表单,我还需要在其中使用ajax。但我在日志中收到此错误消息,Ajax不起作用: 消息1 表单帖子数据无效。 消息2 注意:未定义的索引:form_build_id在ajax_get_form()中(/pplications/mamp/htdocs/ta/includes/t...

0  在显示开始和结束日期时,损坏的格式  ( Broken formatting while displaying both start and end date ) 
我在d7中添加了事件内容类型,我有事件开始日期。我设置了这个字段以收集结束日 +它是收集时间,并有选项检查"全天事件" 。 当我创建新事件时,我在退出中有什么样的: Frida2013, 20-Sunda2013, 22, Frida2013, 20-Sunda2013, 22eptember Frida201...

1  刻面出现“_mempty_”  ( Facets appear empty ) 
我正在使用apache solr搜索集成和facet api模块。我正在尝试为自定义字段 publication_date ,,, journal ,它们是内容类型 publication < /代码>。 这3个字段成功索引为 ss_date , ss_author , ss_journal 。此外,我可以在默认的a...

0  如何修改打印 - 邮件 - 邮件 - 节点 - node-type.tpl.php drupal 7x  ( How to modify print mail node node type tpl php drupal 7x ) 
我安装了模块 https://drupal.org/project/print ,drupal 7x,但现在我们需要控制显示节点上的每个变量。我的意思是打印出一些变量内容和其他否,也在两列中打印它。 好好让桌子不是问题。问题是如何获取变量内容以便打印出来? 我有这个代码,工作,但默认打印所有内容,以丑陋的方式。 ...

1  与菜单和跳转菜单的视图分类为上下文过滤器  ( Views with both menu and jump menu taxonomy terms as contextual filters ) 
我有一个 category 分类菜单和 city 跳转菜单的页面视图。我希望它们共同努力,以便如果该视图显示所有内容和用户点击菜单中的类别,则视图将由类别以及用户致密选择一个 city 在跳转菜单中,视图将由城市进行过滤。如果已经选择了类别并且用户选择 city ,则视图应该由 category 和 city过滤,反...

0  将模块应用于以前的帖子  ( Apply modules to previous posts ) 
我最近从另一个数据库(自定义格式)导入了我的文章,我想将模块(如颜色框和其他相关的模块)应用于以前的帖子。是允许这种事情的标准行为,或者我应该手动调整所有上一篇文章吗? 我以前只使用WordPress,他们的插件在所有文章(过去和新的)上工作。 ...

1  尝试在使用ubercart时发送电子邮件时的错误  ( Errors when trying to send e mail when using ubercart ) 
我知道的很多其他: 无法发送电子邮件。如果问题仍然存在,请联系站点管理员。 已经被问到的问题,我相信我的情况有点不同。 情况: 我已被任务为我的公司网站进行一些更新。他们托管并使用CPanel进行管理。我一直在使用该网站的Drupal部分,并在尝试执行以下任何一项时达到无法发送电子邮件错误: 创建一个用户帐户 ...

0  如何创建独立的部分,自动使用菜单和更多页面  ( How to create independent sections which consits of menu and more pages automat ) 
我在网上创建独立的部分没问题。 我有内容类型命名项目。它基本上是着陆页,有自己的菜单,这个菜单可以链接多个简单页面。这些项目有SimIllar结构,每一个都在他们身上是页面,如时间线,新闻&amp;事件......现在,当我想创建新项目时,我需要创建新项目,而不是创建多个简单页面,创建菜单,为此项目添加菜单等。它真...

-1  是否有用于在社交媒体网络上自动发布的SNY模块?  ( Is there sny module for auto posting on social media networks ) 
是有没有模块,可以自动将我们的Drupal站点内容发布到社交媒体网络(例如Facebook,Twitter)? 对于Wordpress,有社交网络自动海报插件。什么是Drupal的等效模块? ...

0  将Apache Solr集成到Drupal Core Search模块的表单  ( Integrate apache solr to drupal core search modules form ) 
我尝试使用apache solr视图链接搜索表单的原因是因为,我有一些字段与结果一起显示。 如果使用默认的apache solr,则结果没有所有索引字段,因此我决定创建Apache Solr视图,但这将使搜索字段作为视图过滤器,我无法放置搜索框在标题区域。 在尝试所有这些选项后,我需要使用Apache Solr视图...

0  从网站上从页面移动到页面时,URL的长度会增加,重复由& - 如何控制的附加字符串?  ( When moving from page to page on site url increases in length with repeating ad ) 
我在我的网站上的几种情况下注意到URL长度随着附加字符串(参数,参数) 此发生在包括当使用视图时使用视图时,在使用映射浏览页面时,此URL片段: field_geofield_distance%5Bdistance%5D=100&field_geofield_distance%5Bunit%5D=3959&fiel...




© 2021 it.wenda123.org All Rights Reserved. 问答之家 版权所有


Licensed under cc by-sa 3.0 with attribution required.