quaint-potato-13675
06/28/2024, 7:09 AMchilly-king-10285
06/28/2024, 7:09 AMchilly-king-10285
06/28/2024, 7:09 AMquaint-potato-13675
06/28/2024, 7:10 AMchilly-king-10285
06/28/2024, 7:11 AMchilly-king-10285
06/28/2024, 7:11 AMrequest_url
parameter. The request_url
parameter is the initial URL that was requested from Ory Kratos and can be used to forward information contained in the URL's path or query. This could potentially be used to track the app from which the user was redirected. You can find more about this in the [Ory Kratos API Reference](https://www.ory.sh/docs/kratos/reference/api). For more complex requirements, you might need to customize the identity schema. The identity schema in Ory Kratos is flexible and can be extended with custom fields. You could potentially add a field to store the information about the app from which the user was redirected. More details on how to customize the identity schema can be found in the [Ory Kratos documentation](https://www.ory.sh/docs/kratos/manage-identities/customize-identity-schema#examples). Please note that these are potential solutions and their feasibility would depend on your specific use case and setup.quaint-potato-13675
06/28/2024, 7:12 AMchilly-king-10285
06/28/2024, 7:13 AMchilly-king-10285
06/28/2024, 7:13 AMPUT /admin/identities/{id}
endpoint. Here is an example of how you might structure your HTTP request: json PUT /admin/identities/{id} Content-Type: application/json Authorization: Bearer API_KEY { "schema_id": "default", "traits": { "email": "<mailto:user@example.com|user@example.com>", "name": "User Name" }, "state": "active", "metadata_public": { "app": "App Name" } }
In this example, {id}
should be replaced with the ID of the identity you want to update, and API_KEY
should be replaced with your actual API key. The metadata_public
field is being used to store the name of the app. Please note that you need an API Key to call these endpoints. You can read more about [Authorization with API Keys](https://www.ory.sh/docs/concepts/personal-access-token) in the Ory documentation. Also, remember that metadata is not validated using the identity's JSON schema. You must ensure that the metadata you store is valid according to your schema and you must keep the schema up to date to accommodate changes in the data. For more information, refer to the [Ory Kratos API Reference](https://www.ory.sh/docs/kratos/reference/api).quaint-potato-13675
06/28/2024, 7:14 AMchilly-king-10285
06/28/2024, 7:14 AMchilly-king-10285
06/28/2024, 7:15 AMjavascript const axios = require('axios'); // This is a hypothetical hook function async function afterRegistrationHook(request, response) { const identityId = request.identity.id; const updateResponse = await axios.put(`<https://your-kratos-server.com/admin/identities/${identityId}>`, { schema_id: 'default', traits: request.identity.traits, state: 'active', metadata_public: { app: 'App Name' } }, { headers: { 'Content-Type': 'application/json', 'Authorization': 'Bearer API_KEY' } }); // Handle the response from the update request if (updateResponse.status === 200) { console.log('Identity updated successfully'); } else { console.error('Failed to update identity'); } } // Use the hook function in your registration flow <http://app.post|app.post>('/auth/registration', (req, res) => { // Registration logic here... // Call the hook function after registration afterRegistrationHook(req, res); });
In this example, replace '<https://your-kratos-server.com>'
with the URL of your Ory Kratos server and 'Bearer API_KEY'
with your actual API key. Please note that this is a simplified example and you might need to adjust it according to your specific setup and requirements. For more information about hooks, please refer to the [Ory Kratos documentation](https://www.ory.sh/docs/kratos/hooks/configure-hooks).quaint-potato-13675
06/28/2024, 9:56 AMchilly-king-10285
06/28/2024, 9:56 AMchilly-king-10285
06/28/2024, 9:57 AMrequest_url
to an array in `metadata_public`: jsonnet function(ctx) { identity: { metadata_public: { request_urls: [ctx.request_url] } } }
In this example, ctx.request_url
is the URL of the request that initiated the flow. This value is automatically provided by Ory Kratos and is available in the ctx
object. This Jsonnet code will result in a JSON object that looks like this: json { "identity": { "metadata_public": { "request_urls": ["<http://example.com/auth/registration>"] } } }
Please note that this is a simplified example and you might need to adjust it according to your specific setup and requirements. For more information about using Jsonnet with Ory Kratos, please refer to the [Ory Kratos documentation](https://www.ory.sh/docs/kratos/reference/jsonnet).quaint-potato-13675
06/28/2024, 9:58 AMchilly-king-10285
06/28/2024, 9:58 AMchilly-king-10285
06/28/2024, 9:58 AMmetadata_public
field of the identity. It does not affect the traits
field. However, if you want to modify the traits
field in the future, be aware that when you use the PUT /admin/identities/{{id}}
endpoint, the entire identity object is replaced with the one provided in the request body. So, if you want to keep the existing traits, you need to include them in your request body. For more information, refer to the [Ory Kratos API Reference](https://www.ory.sh/docs/kratos/reference/api).quaint-potato-13675
06/28/2024, 9:59 AMfunction(ctx) {
identity: {
metadata_public: {
request_urls: [ctx.request_url]
}
@chilly-king-10285 Do I need to have userId in this ?chilly-king-10285
06/28/2024, 9:59 AMchilly-king-10285
06/28/2024, 9:59 AMuserId
in this Jsonnet code. The userId
is not required for adding the request_url
to the metadata_public
field of the identity. However, if you want to include the userId
for some reason, you can access it using ctx.identity.id
. Here's how you could modify the Jsonnet code to include the `userId`: jsonnet function(ctx) { identity: { id: ctx.identity.id, metadata_public: { request_urls: [ctx.request_url] } } }
This will add the userId
to the identity object in the request body. But remember, this is not necessary for adding the request_url
to the metadata_public
field. For more information about using Jsonnet with Ory Kratos, please refer to the [Ory Kratos documentation](https://www.ory.sh/docs/kratos/reference/jsonnet).quaint-potato-13675
06/28/2024, 10:00 AMchilly-king-10285
06/28/2024, 10:00 AMchilly-king-10285
06/28/2024, 10:01 AM<http://localhost:4455/ui/registration>
and <http://localhost:4455/admin/identities/{id}>
should not be enclosed in < >
. They should be just <http://localhost:4455/ui/registration>
and <http://localhost:4455/admin/identities/{id}>
respectively. 2. The {id}
in the URL <http://localhost:4455/admin/identities/{id}>
is a placeholder and should be replaced with the actual ID of the identity you want to update. 3. Make sure the file metadata.jsonnet
exists at the path /etc/config/kratos/
. Here's the corrected configuration: yaml registration: ui_url: <http://localhost:4455/ui/registration> login_hints: true enable_legacy_one_step: false after: hooks: - hook: web_hook config: url: <http://localhost:4455/admin/identities/{id}> method: PUT body: file:///etc/config/kratos/metadata.jsonnet response: parse: true
Remember to replace {id}
with the actual ID of the identity you want to update. For more information, refer to the [Ory Kratos documentation](https://www.ory.sh/docs/kratos/reference/configuration).quaint-potato-13675
06/28/2024, 10:01 AMchilly-king-10285
06/28/2024, 10:01 AMchilly-king-10285
06/28/2024, 10:02 AMurl
field in the configuration file does not support dynamic values or expressions like {ctx.identity.id}
. It should be a static URL. If you want to update the identity after registration, you might need to handle this in your application code. After the user registers, you can use the identity ID returned by Ory Kratos to make a PUT
request to the <http://localhost:4455/admin/identities/{id}>
endpoint. For more information, refer to the [Ory Kratos documentation](https://www.ory.sh/docs/kratos/reference/configuration).