如何在社交身份验证中存储 facebook 的访问令牌

Posted

技术标签:

【中文标题】如何在社交身份验证中存储 facebook 的访问令牌【英文标题】:how to store access token for facebook in social auth 【发布时间】:2015-04-16 22:42:46 【问题描述】:

我正在使用社交身份验证来集成 facebook、google 等社交应用程序。我成功授权并在 logcat 中打印了访问令牌,但我想存储它们以发送到 api。

class SignUp extends Activity

  SocialAuthAdapter adapter;
  public void onCreate(Bundle SavedBundleInstanceState )
   
   adapter = new SocialAuthAdapter(new ResponseListener());
   adapter.authroize(SignUp.this,Provider.Facebook);

  

通过这段代码,我在 logcat 中获取了访问令牌,但不知道如何存储它。

【问题讨论】:

您可以使用来自 android 的许多存储选项,例如 Shared Preferences、SQLite Databases 等 developer.android.com/guide/topics/data/data-storage.html @Mourice 你没有得到我的问题..实际上通过上面的代码我可以在 logcat 上打印访问令牌,但不知道如何让它们进入我的活动,所以我可以使用它们..i已使用社交身份验证进行集成 【参考方案1】:

您可以使用最简单的方法shared preferences .. 或使用session... 在其中您可以保存和检索stringkey value..

SessionManager.java

 public class SessionManager 
// Shared Preferences
SharedPreferences pref;

// Editor for Shared preferences
Editor editor;

// Context
Context _context;

// Shared pref mode
int PRIVATE_MODE = 0;

// Sharedpref file name
private static final String PREF_NAME = "wlm";

// All Shared Preferences Keys
private static final String IS_LOGIN = "IsLoggedIn";
private static final String STATUS = "status";
private static final String STATUS_COLOR = "status_color";



// User name (make variable public to access from outside)
public static final String KEY_NAME = "name";

// Email address (make variable public to access from outside)
public static final String KEY_EMAIL = "email";

// Constructor
public SessionManager(Context context)
    this._context = context;
    pref = _context.getSharedPreferences(PREF_NAME, PRIVATE_MODE);
    editor = pref.edit();

/**
 * Create login session
 * */
public void createLoginSession(String name, String email)
    // Storing login value as TRUE
    editor.putBoolean(IS_LOGIN, true);

    // Storing name in pref
    editor.putString(KEY_NAME, name);

    // Storing email in pref
    editor.putString(KEY_EMAIL, email);

    // commit changes
    editor.commit();
   

/**
 * Check login method wil check user login status
 * If false it will redirect user to login page
 * Else won't do anything
 * */
public void checkLogin()
    // Check login status
    if(!this.isLoggedIn())
        // user is not logged in redirect him to Login Activity
        //           Intent i = new Intent(_context, LoginScreen.class);
        //           // Closing all the Activities
        //           i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        //            
        //           // Add new Flag to start new Activity
        //           i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        //            
        //           // Staring Login Activity
        //           _context.startActivity(i);
    



/**
 * Get stored session data
 * */
public HashMap<String, String> getUserDetails()
    HashMap<String, String> user = new HashMap<String, String>();
    // user name
    user.put(KEY_NAME, pref.getString(KEY_NAME, null));

    // user email id
    user.put(KEY_EMAIL, pref.getString(KEY_EMAIL, null));

    // return user
    return user;


/**
 * Clear session details
 * */
public void logoutUser()
    // Clearing all data from Shared Preferences
    editor.clear();
    editor.commit();

    // After logout redirect user to Loing Activity
    //       Intent i = new Intent(_context, LoginScreen.class);
    //       // Closing all the Activities
    //       i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    //        
    //       // Add new Flag to start new Activity
    //       i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    //        
    //       // Staring Login Activity
    //       _context.startActivity(i);


/**
 * Quick check for login
 * **/
// Get Login State
public boolean isLoggedIn()
    return pref.getBoolean(IS_LOGIN, false);

在你的活动中,你可以存储你的字符串

session.editor.putInt("your key", YourString);

并使用检索

String str = session.pref.getString("your key", "");

还为 SessionManager 中的每个条目定义键,例如

 private static final String ANY_NAME= "your key";

【讨论】:

【参考方案2】:

访问令牌存储在 Session 类中

Session session = Session.getActiveSession();
String accessToken = session.getAccessToken();

【讨论】:

以上是关于如何在社交身份验证中存储 facebook 的访问令牌的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Firebase 登录多个社交服务?

用于登录 Facebook 的 Python 社交身份验证无法在生产服务器上运行

错误社交身份验证 4.4:: 无效范围:publish_stream。

如何使用颤振在 django 中进行 google、facebook 身份验证

使用自己的 API 后端处理社交网络身份验证

自定义Web应用程序中的AWS Cognito社交提供程序