小编Cul*_*tes的帖子

获取电子邮件并命名Facebook SDK v4.4.0 Swift

TL; TR:如何使用facebook SDK 4.4获取在我的应用程序上登录的用户的电子邮件和名称

到目前为止,我已经设法登录工作,现在我可以从应用程序的任何位置获取当前访问令牌.

我如何配置登录视图控制器和Facebook登录按钮:

class LoginViewController: UIViewController, FBSDKLoginButtonDelegate {

    @IBOutlet weak var loginButton: FBSDKLoginButton!

    override func viewDidLoad() {
        super.viewDidLoad()
        if(FBSDKAccessToken.currentAccessToken() == nil)
        {
            print("not logged in")
        }
        else{
            print("logged in already")
        }

        loginButton.readPermissions = ["public_profile","email"]
        loginButton.delegate = self

    }

    //MARK -FB login
    func loginButton(loginButton: FBSDKLoginButton!, didCompleteWithResult result: FBSDKLoginManagerLoginResult!, error: NSError!) {
        //logged in
        if(error == nil)
        {
            print("login complete")
            print(result.grantedPermissions)
        }
        else{
            print(error.localizedDescription)
        }

    }

    func loginButtonDidLogOut(loginButton: FBSDKLoginButton!) {
        //logout
        print("logout")
    }
Run Code Online (Sandbox Code Playgroud)

现在在我的主视图中,我可以获得访问令牌,如下所示:

   let accessToken = FBSDKAccessToken.currentAccessToken()
    if(accessToken …
Run Code Online (Sandbox Code Playgroud)

facebook-sdk-4.0 swift

40
推荐指数
6
解决办法
4万
查看次数

注册外部登录Web API

我不明白为什么他们不是一个明确的教程或指南,所以我希望我的问题可以在这里得到解答.

因此,尝试通过Web Api注册来自Facebook或谷歌的用户.

问题是,在这个RegisterExternal方法上,这一行:

var info = await Authentication.GetExternalLoginInfoAsync();
Run Code Online (Sandbox Code Playgroud)

它返回null,因此返回a BadRequest()

到目前为止我得到了什么:

Startup.Auth.cs我已经知道了id和秘密,请注意我也尝试过使用Microsoft.Owin.Security.Facebook

var facebookOptions = new Microsoft.Owin.Security.Facebook.FacebookAuthenticationOptions
            {
                AppId = "103596246642104",
                AppSecret = "1c9c8f696e47bbc661702821c5a8ae75",
                Provider = new FacebookAuthenticationProvider()
                {
                    OnAuthenticated = (context) =>
                    {
                        context.Identity.AddClaim(new System.Security.Claims.Claim("urn:facebook:access_token", context.AccessToken, ClaimValueTypes.String, "Facebook"));

                        return Task.FromResult(0);
                    }
                },
            };
            facebookOptions.Scope.Add("email");
            app.UseFacebookAuthentication(facebookOptions);



            app.UseGoogleAuthentication(new GoogleOAuth2AuthenticationOptions()
            {
            ClientId = "328779658984-t9d67rh2nr681bahfusan0m5vuqeck13.apps.googleusercontent.com",
            ClientSecret = "ZYcNHxBqH56Y0J2-tYowp9q0",
            CallbackPath = new PathString("/api/Account/ManageInfo")
        });
Run Code Online (Sandbox Code Playgroud)

facebookOptions来源:这篇文章

额外的facebookOptions没有解决问题.

我能够从谷歌和Facebook检索access_token.我也可以使用此access_token进行身份验证api/Account/UserInfo

GET http://localhost:4856/api/Account/UserInfo
in the header:
Authorization: Bearer R9BTVhI0...
Run Code Online (Sandbox Code Playgroud)

哪个回报: …

c# asp.net oauth-2.0 asp.net-web-api google-oauth

12
推荐指数
1
解决办法
9275
查看次数

跨Asp.NET Core和Framework的数据保护提供程序(生成密码重置链接)

遇到了与DataProtectionProvider有关的这个问题,首先我们只有2个.NET Framework项目,现在添加了一个.NET Core项目让我困惑如何执行以下操作:从.NET Framework项目生成密码重置链接,并在.NET Core项目中使用它.两者都使用相同的数据库和用户表,这些表已经相互兼容..NET Framework仍然是Code-First数据库生成中的领先项目.

在两个.NET框架项目中,我使用一个共享代码库,它具有以下代码:

//not sure where I got this from but it is part of the solution for solving
//password link generating and using in two different applications.
public class MachineKeyProtectionProvider : IDataProtectionProvider
{
    public IDataProtector Create(params string[] purposes)
    {
        return new MachineKeyDataProtector(purposes);
    }
}

public class MachineKeyDataProtector : IDataProtector
{
    private readonly string[] _purposes;

    public MachineKeyDataProtector(string[] purposes)
    {
        _purposes = purposes;
    }

    public byte[] Protect(byte[] userData)
    {
        return MachineKey.Protect(userData, _purposes);
    } …
Run Code Online (Sandbox Code Playgroud)

c# asp.net data-protection asp.net-identity asp.net-core

11
推荐指数
1
解决办法
5441
查看次数

Ngx转换带有共享/延迟加载模块

可能是最常见的问题之一,而我发现的文档其他一些问题试图为我解决问题,但是我仍然不确定如何解决此问题。

这是我的结构:

在此处输入图片说明

  • 应用模块当然是引导的主要模块
  • Countryselector模块:负责加载默认国家(基于IP),并根据浏览器决定使用哪种语言。基本上,它是决定使用哪个国家/地区语言的核心功能,并且包含一个供用户更改国家/地区语言的下拉菜单。
  • 结帐模块,选择模块,付款模块都通过路由延迟加载。

应用模块

export function HttpLoaderFactory(http: HttpClient) {
  return new TranslateHttpLoader(http);
}

@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    HttpClientModule,
    BrowserModule,
    AppRoutingModule,
    ContrySelectorModule,
    TranslateModule.forRoot({
      loader: {
        provide: TranslateLoader,
        useFactory: HttpLoaderFactory,
        deps: [HttpClient]
      }
    })
  ],
  export class AppModule { }
Run Code Online (Sandbox Code Playgroud)

CountrySelectorModule

@NgModule({
  declarations: [CountryselectorComponent],
  imports: [
    CommonModule,
    TranslateModule.forRoot({
      loader: {
        provide: TranslateLoader,
        useFactory: HttpLoaderFactory,
        deps: [HttpClient]
      }
    })
  ],
  exports: [
    CountryselectorComponent
  ]
})
export class ContrySelectorModule { }
Run Code Online (Sandbox Code Playgroud)

选择模块:

@NgModule({ …
Run Code Online (Sandbox Code Playgroud)

lazy-loading ngx-translate angular angular7

10
推荐指数
1
解决办法
2889
查看次数

vs2015 FTP发布更改的文件

不幸的是,我没有在服务器上使用Web Deploy的奢侈.如何在Visual Studio 2015中仅通过FTP更新已更改的文件?

听起来像一个已经回答的问题,对吧?好吧,我发现以前版本的问题没有好的答案但是可以发布单个文件.我仍然没有找到通过FTP发布更改文件的解决方案.这些年来还没有出现吗?

有这个选项允许在发布期间进行预编译.但这对默认设置没有任何影响.

我现在只是在本地发布它,然后使用FileZilla发布它,因为那个提供了一个选项,只有"覆盖更新".最好在VS中实现这种自动化.

是否有可能通过FTP使用Web Deploy的逻辑?

ftp publish webdeploy visual-studio-2015

6
推荐指数
0
解决办法
561
查看次数

为什么在 ApiController 中获取 ActionName 这么复杂?更简单的方法?

获取操作名称和控制器名称的 MVC 控制器:

public class AuthorizeController : Controller
{

    protected override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        string actionName = filterContext.ActionDescriptor.ActionName;
        string controllerNamespace = filterContext.ActionDescriptor.ControllerDescriptor.ControllerType.FullName;
        //..more code
        base.OnActionExecuting(filterContext);
    }
}
Run Code Online (Sandbox Code Playgroud)

非常简单。

但是当我有一个 ApiController ( System.Web.Http.ApiController) 时,事情就变得更复杂了:

在此输入图像描述

最终,在一些更清晰的技巧的帮助下,我能够将其减少到“几行”。

private string GetActionName(HttpControllerContext context)
{
    var httpRouteDataCollection = context.RouteData.Values.Values;
    var httpRouteDataCollection2 = httpRouteDataCollection.FirstOrDefault();
    if (!(httpRouteDataCollection2 is IHttpRouteData[] httpRouteData))
    {
        return null;
    }

    IHttpRouteData routeData = httpRouteData.FirstOrDefault();
    var httpActionDescriptorCollection = routeData?.Route.DataTokens["actions"];
    if (!(httpActionDescriptorCollection is HttpActionDescriptor[] httpActionDescriptor))
    {
        return null;
    }
    HttpActionDescriptor reflectedHttpActionDescriptor = httpActionDescriptor.FirstOrDefault();
    return …
Run Code Online (Sandbox Code Playgroud)

c# performance asp.net-web-api

6
推荐指数
1
解决办法
1190
查看次数

MVC Compilation Error, using WebApplication1 in Temporary ASP.NET Files

I got this wierd error today and I can't solve it, obviously. I've created an entire ASP.NET API, which works just fine, no trouble. Now I want to add some MVC pages to the application. ASP.NET API automatically gives you one controller, (home controller) with the default asp.net page.

Now when I try to open this page, I browse to http://localhost:26264/home.

First I got the error with System.Web.MVC reference: Could not load file or assembly 'System.Web.Mvc, Version=5.2.2.0... I solved …

c# asp.net-mvc reference asp.net-web-api2

5
推荐指数
1
解决办法
3398
查看次数

带有颤振的传送带 - 在本地运行 .net Web 应用程序时出现握手错误

我正在使用Conveyor(一个 Visual Studio 2019 扩展)让我的 ASP.NET Core 可用于 android 模拟器。到目前为止,这一直很有效。我已经开发了 Xamarin 应用程序、UWP 应用程序,并且之前将它用于本机 Android 应用程序,它可以正常工作。但是在当前的 flutter 应用程序中,这不起作用。

Conveyor 确实提供了在 android 设备上安装证书的教程:https : //conveyor.cloud/Help/SSL

按照这些说明操作后,我可以正常加载网页:

有效证书安卓模拟器

这也已在 Windows(运行 Web 应用程序的机器)上完成,但这是由 Conveyor 扩展自动完成的,但是:

颁发的证书

我运行此 Dart 代码来调用 API:

未来登录(字符串电子邮件,字符串密码)异步{

var response = await http
    .post("$_url/login", body: {email: email, password: password});//_url= https://192.168.0.148:45455/api

if (response.statusCode == 200) {
  var token = LoginResult.fromJson(json.decode(response.body));
  _authToken = token.token;
  return token.token;
}
throw Exception(
    "Login failed: ${response.statusCode} body: ${response.body}");
Run Code Online (Sandbox Code Playgroud)

}

发生的异常:

HandshakeException (HandshakeException: Handshake error in client …

ssl android dart flutter

5
推荐指数
2
解决办法
2868
查看次数

按下后,表格视图顶部空间到导航栏增加

当我单击表视图中的一个单元格时,它会打开一个包含以下代码的新视图:

   let fullResView : FullResponseViewController = self.storyboard?.instantiateViewControllerWithIdentifier("FullResponseView") as! FullResponseViewController
   fullResView.receivedPost = post
   self.navigationController?.pushViewController(fullResView, animated: false)
Run Code Online (Sandbox Code Playgroud)

当我按下时,它会增加表格视图和顶部布局指南之间的距离.表示:

表视图导航控制器错误.

层次:

  • 我有一个标签栏控制器,嵌入在导航控制器中.
  • 创建普通视图后,拖放表格视图.因此表视图位于View中.
  • 表视图确实包含标题视图.为此设置背景颜色时,它会与它一起移动,因此它不应该是具有这些约束的任何东西.

表视图的约束是:

  • 与superview相同
  • 将中心X与superview对齐
  • 顶部空间到顶部布局指南
  • 底部空间到底部布局指南

我尝试过以下方法:

在viewWillAppear中设置:

self.responsesTableView.contentOffset =  CGPointMake(0, 0)
self.automaticallyAdjustsScrollViewInsets = false
Run Code Online (Sandbox Code Playgroud)

当我按下然后切换到标签栏中的另一个视图,然后再次切换回来时,这确实有效.没有contentOffset它将永远保持这样.

xcode ios swift

4
推荐指数
1
解决办法
2176
查看次数

编辑框架高度集合可重用视图

使用 Xcode 7.0 beta, Swift 2.0, IOS 9 支持

我有一个视图控制器,其中包含一个集合视图。里面是一个标题:集合可重用视图,一个集合:集合视图单元格和一个页脚:集合可重用视图。

在标题内,我具有登录、注册或注销的功能。根据单击的按钮,此标题内的视图将被隐藏或不隐藏。现在我要做的最后一件事是重新调整标题视图(集合可重用视图)的框架高度。因为在登录时,RegisterView 和 LoginView 都会被隐藏,这会留下大量的空白空间。

这是我的结构的图像:

结构视图

我很快注意到我无法向 Collection Reusable View 添加任何约束:(

标题集合可重用视图的所有功能都在一个扩展UICollectionReusableView. 我能读self.frame.height,但我不能写。我似乎能够编辑框架(为什么高度是只读的,而框架不是,苹果?)。然而,这没有效果,甚至self.frame = CGRectZero没有做任何事情。

我注意到在初始化页眉和页脚 ( func collectionView, switch on kind -> UICollectionElementKindSectionHeader) 时,我可以在主 ViewController.swift 中执行此操作,但这不是我想要的,因为它应该在单击按钮时更改。

现在,我将 RegisterView 向上移动(我编辑了代码中的顶部约束)。

xcode ios uicollectionreusableview swift swift2

3
推荐指数
1
解决办法
2435
查看次数