velruse icon indicating copy to clipboard operation
velruse copied to clipboard

Need to be able to store some context before sending to the provider

Open sontek opened this issue 12 years ago • 14 comments

I would to allow about registration and authentication via social networks but want to handle what happens when it comes back differently.

There is no way to currently know where the auth was initiated.

sontek avatar Mar 23 '12 16:03 sontek

I would love to see this implemented - if there is a chance of it being merged, I can likely create a pull...

@bbangert thoughts?

kiall avatar Jul 11 '12 10:07 kiall

There is a different context for each provider(FacebookAuthenticationComplete, TwitterAuthenticationComplete, etc.), so you can attach different Pyramid views to different contexts, if you are using velruse as a Pyramid plugin. Something like:

    @view_config(context='velruse.FacebookAuthenticationComplete'..)
    def view(request):
         pass

jayd3e avatar Jul 23 '12 23:07 jayd3e

@jayd3e - I think we are talking about different kinds of context...

I need to be able to store arbitrary data before redirecting the user, and then receive it when the user arrives back.

I'm suggesting support for, for example, OAuth2's 'state' parameter described in section 4.1.1 of the OAuth2 spec.

kiall avatar Jul 24 '12 00:07 kiall

Gotcha. Yah, in my apps I would likely store that kind of information in the session, and then remove those variables once authentication is complete. I'll have to take a look at OAuth2's 'state' parameter though, as it would be nice if velruse supported the full spec.

jayd3e avatar Jul 24 '12 18:07 jayd3e

Velruse would probably store this information in the session. It tends to use the state parameter for CSRF checks to validate the authentication. With that in mind, I'm not sure how much velruse should do here versus you just storing the data in the session before redirecting to the velruse login endpoint. Thoughts?

mmerickel avatar Jul 26 '12 23:07 mmerickel

FWIW this is similar to #55

mmerickel avatar Jul 28 '12 21:07 mmerickel

I'm using velruse as a Pyramid app. In the old velruse, it was very convenient to pass endpoint as a parameter which is POSTed to velruse provider form handler. Later, when velruse receives the response from provider, it would redirect to the endpoint given as the parameter during the first POST.

That being said, one option for the new velruse providers would be to take some "context" parameter during the initial POST. Save it to session under uuid-like key that is received from the provider as the "state" parameter (so as to allow for simultaneous auth transactions). And then in auth_complete_view take the "context" from session and pass it to the endpoint url.

Would that work? Does anyone have better options in mind?

naktinis avatar Aug 08 '12 18:08 naktinis

Of course, overriding the endpoint (that is now taken from config) for an individual form would also be nice.

naktinis avatar Aug 08 '12 18:08 naktinis

I had not considered simultaneous auth transactions for a single user to be a priority.

mmerickel avatar Aug 08 '12 18:08 mmerickel

@sontek What do you think about just adding a user_data parameter to the login forms. This would update the authentication context to contain profile, credentials, and user_data. This parameter could be anything you want it to be. A json-encoded string, encrypted, signed, whatever. To velruse it'll just be a key shuffled around. I'm not sure user_data is a good name, maybe custom_state?

mmerickel avatar Aug 31 '12 16:08 mmerickel

Another option is to hook into Pyramid's event system. Basically when the login view is invoked it could emit an event containing the request, the provider name/type and give you a chance to store information in the session.

mmerickel avatar Aug 31 '12 17:08 mmerickel

I guess something like user_data in login forms would work for me.

naktinis avatar Sep 05 '12 21:09 naktinis

@sontek would the solution proposed by @mmerickel work for you? Do you have other ideas?

naktinis avatar Sep 12 '12 10:09 naktinis

@mmerickel @naktinis This would work for me.

sontek avatar Sep 12 '12 17:09 sontek