Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Twitter oauth works again? #423

Open
kotyatokino opened this issue Oct 25, 2023 · 10 comments
Open

Twitter oauth works again? #423

kotyatokino opened this issue Oct 25, 2023 · 10 comments

Comments

@kotyatokino
Copy link

No description provided.

@kotyatokino
Copy link
Author

Sorry for my empty post.
I'm now installed dance 6.2.0 and set up twitter with free plan, then I get works fine with twitter oauth.
I think merge back to removed twitter code to head repository.

Please confirm your side and consider to merge back please.

@daenney
Copy link
Collaborator

daenney commented Oct 26, 2023

X hasn't announced any changes around this as far as I can tell. This might be accidental, they might change their minds about it tomorrow.

If there's some official release around this from X that makes it clear that this is an intentional change and we can expect it to continue to work in the future, then we can take action.

@kotyatokino
Copy link
Author

See here
https://twitter.com/XDevelopers/status/1641222782594990080
Officially announced that they are providing "Login with X " with free plan. at 2nd tweet .

@daenney
Copy link
Collaborator

daenney commented Oct 27, 2023

That's March 2023, 8 months ago. Mid-April 2023, #415 was raised because it wasn't working, and we removed X support in May 2023 through #416.

It looks like the Free Tier still has Login With Twitter, so it should probably still work. Though the base_url needs to be set to the Twitter API 2.0 for anything else to work.

If someone can do the work to properly verify all this, then we can look at bringing it back.

@kotyatokino
Copy link
Author

My old 5 years ago code is successfully login with 6.2.0 without base_url config.
Anyway I will check the code of API 2.0 related part of dance.
Also, Does anybody help who can test old twitter login code.

@daenney If you have a time, please let me know the point of verify. I'm just user of dance, so I will just try to start digging into dance from now.

@kotyatokino
Copy link
Author

I just try to extend twitetr with oauth2 lib. But found this article.So I think the best way to stay oauth 1.0 .
I think only revert back to old oauth 1.0 twitter .
Is this my miss understanding??

https://developer.twitter.com/en/docs/authentication/oauth-2-0/application-only

Please note that only OAuth 1.0a or OAuth 2.0 Authorization Code Flow with PKCE is required to issues requests on behalf of users. The API reference page describes the authentication method required to use an API. You will need user-authentication, user-context, with an access token to perform the following:

===>Access Direct Messages or account credentials

@kotyatokino
Copy link
Author

memos
base_url="https://api.twitter.com/2/",
authorization_url="https://twitter.com/i/oauth2/authorize",
token_url="https://api.twitter.com/2/oauth2/token",

@kotyatokino
Copy link
Author

oauth 2.0 patched 6.2.0 just works
image

@kotyatokino
Copy link
Author

Confirmed successfully login with oauth2.0 maybe.
put this code to twitter.py then we can user oauth 1.0 =twitter class and then oauth2.0 =twitter2 class
I cant understand this page's code block usage......

`
def make_twitter2_blueprint(
api_key=None,
api_secret=None,
*,
scope=None,
redirect_url=None,
redirect_to=None,
login_url=None,
authorized_url=None,
session_class=None,
storage=None,
rule_kwargs=None,
):
from authlib.common.security import generate_token
from authlib.oauth2.rfc7636 import create_s256_code_challenge
strToken = generate_token(128)
strChallenge = create_s256_code_challenge(strToken)

twitter2_bp = OAuth2ConsumerBlueprint(
    "twitter2",
    __name__,
    client_id=api_key,
    client_secret=api_secret,
    scope=scope,
    base_url="https://api.twitter.com/",
    authorization_url="https://twitter.com/i/oauth2/authorize",
    token_url="https://api.twitter.com/2/oauth2/token",
    token_url_params={"code_verifier":strToken},
    redirect_url=redirect_url,
    redirect_to=redirect_to,
    login_url=login_url,
    authorized_url=authorized_url,
    session_class=session_class,
    storage=storage,
    rule_kwargs=rule_kwargs,
    authorization_url_params={"code_challenge":strChallenge,
                              "code_challenge_method":"S256"},

)

twitter2_bp.from_config["client_id"] = "TWITTER2_OAUTH_CLIENT_ID"
twitter2_bp.from_config["client_secret"] = "TWITTER2_OAUTH_CLIENT_SECRET"

@twitter2_bp.before_app_request
def set_applocal_session():
    g.flask_dance_twitter2 = twitter2_bp.session

return twitter2_bp

twitter2 = LocalProxy(lambda: g.flask_dance_twitter2)
`

and userland code

`
bp = make_bp(
api_key=mcfg.strTWappid,
api_secret=mcfg.strTWappsec,
scope="tweet.read users.read offline.access",
redirect_url="/captiveportal/twitter2",
authorized_url="/authorized"
)
:
:
:
me = None
try:
me = twitter2.get("2/users/me")
except Exception as e:
g.ilog("Twitter Logged in but something wrong(%s). Redirect to loginpage(%s,%
s)" % (str(e),tupURL[1]["usermac"],tupURL[1]["magic"]))
return redirect(url_for("%s.login" % strSNSname))

if(me.status_code < 200 or me.status_code >= 300):
    g.elog("Twitter auth failed redirect to login: %s ( %s )(%s,%s)" % (me.text,m\

e.status_code,tupURL[1]["usermac"],tupURL[1]["magic"]))
return redirect(url_for("%s.login" % strSNSname))

j = me.json()

`

@kotyatokino
Copy link
Author

made a pull request.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants