2
votes

Just starting to learn django, and I wanted to incorporate the allauth app. Been trying to figure this out all day and haven't found the answer in other questions. Anytime I try to add one of the social logins, I can't even get a login screen and django complains:

get_login_url() keywords must be strings

when it tries to render the provider list. (I copied over base, index, and profile from the example that came with allauth)

I've read that before I use one of the logins, I need to add the social app in the admin interface. So in the admin interface, I want to try one of the simpler ones, so i chose OpenId. Since I don't have a facebook app id or anything yet, I figured with OpenId, I wouldn't need that.

I'm getting hung up on what to use for the Key and Secret to register the social app. I'm new to this stuff, but I thought that was more for OAuth. But if I don't include it, it flags the fields as red and demands them. Where do I find/generate a Key/Secret?

Also, to use OpenId, am I supposed to specify a site like Google or Yahoo, or is there just an "OpenId" site?

I'm still using manage.py runserver, if that makes any difference. But I thought I would still be able to get the page to "render."

1

1 Answers

1
votes

What version of Python are you running? If you are using an old 2.6 version, then you may be running into the issue described here:

http://cuu508.wordpress.com/2011/01/27/keywords-must-be-strings/

Please let me know if that pinpoints your problem. If so, I'll check if I can make allauth play nice with your version...

Update: haven't had the time to test this myself yet, could you give this change a try?:

--- a/allauth/socialaccount/templatetags/socialaccount.py
+++ b/allauth/socialaccount/templatetags/socialaccount.py
@@ -13,7 +13,7 @@ class ProviderLoginURLNode(template.Node):
     def render(self, context):
         provider_id = self.provider_id_var.resolve(context)
         provider = providers.registry.by_id(provider_id)
-        query = dict([(name, var.resolve(context)) for name, var
+        query = dict([(str(name), var.resolve(context)) for name, var
                       in self.params.iteritems()])
         request = context['request']
         if not query.has_key('next'):