小编RVa*_*een的帖子

将用户角色添加到jwt,laravel 5 jwt-auth

我有一个laravel 5后端,使用jwt-auth在登录时发送jwt-token作为json响应.

现在我想将用户角色添加到laravel发送的jwt令牌中,我尝试了以下方式:

这是我现在的控制器

<?php 
namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use JWTAuth;
use Tymon\JWTAuth\Exceptions\JWTException;
use Illuminate\Database\Eloquent\Model;
use App\User;

class AuthenticateController extends Controller
{
    public function authenticate(Request $request)
    {
        // grab credentials from the request
        $credentials = $request->only('email', 'password');
        $user = User::where('email', '=', $credentials['email'])->first();
        $customClaims = ['role' => $user->role];

        try {
            // attempt to verify the credentials and create a token for the user
            if (! $token = JWTAuth::attempt($credentials, $customClaims)) {
                return response()->json(['error' => 'invalid_credentials'], 401);
            }
        } …
Run Code Online (Sandbox Code Playgroud)

php jwt laravel

14
推荐指数
1
解决办法
7584
查看次数

虚张声势覆盖响应类型

我的控制器中有一个通用Result<T>响应类型,例如

public Result<T> GetSomething()
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

我还有一个自定义的 asp.net core 过滤器,它返回 Json 表示形式T

为了让 swashbuckle 生成正确的文档,我必须用以下内容装饰每个方法:

[Produces(typeof(T))]
Run Code Online (Sandbox Code Playgroud)

由于这很麻烦、容易忘记并且容易出错,所以我一直在寻找一种自动化的方法。

现在在 Swashbuckle 中你有一个,但我无法在这些方法中MapType找到:T

services.AddSwaggerGen(c =>
{
    ...
    c.MapType(typeof(Result<>), () => /*can't get T here*/);
};
Run Code Online (Sandbox Code Playgroud)

我正在查看,IOperationFilter但找不到覆盖其中结果类型的方法。

然后还有ISchemaFilter

 public class ResultSchemaFilter : ISchemaFilter
    {
        public void Apply(OpenApiSchema schema, SchemaFilterContext context)
        {
            if (!context.Type.IsGenericType || !context.Type.GetGenericTypeDefinition().IsAssignableFrom(typeof(Result<>)))
            {
                return;
            }

            var returnType = context.Type.GetGenericArguments()[0];

            //How do I override the schema here ?
            var newSchema = context.SchemaGenerator.GenerateSchema(returnType, …
Run Code Online (Sandbox Code Playgroud)

swashbuckle asp.net-core swashbuckle.aspnetcore

7
推荐指数
1
解决办法
1927
查看次数

Xamarin中的自定义事件页面c#

我目前面临以下问题:

我试图在用户输入有效凭据时触发事件,以便我可以切换页面等等.

问题是由于某些原因我无法挂钩事件(虽然我很确定这会是一些愚蠢的事情).

发射事件的类:

namespace B2B
{

    public partial class LoginPage : ContentPage
    {
        public event EventHandler OnAuthenticated;

        public LoginPage ()
        {
            InitializeComponent ();
        }

        void onLogInClicked (object sender, EventArgs e)
        {
            loginActivity.IsRunning = true;

            errorLabel.Text = "";

            RestClient client = new RestClient ("http://url.be/api/");

            var request = new RestRequest ("api/login_check",  Method.POST);
            request.AddParameter("_username", usernameText.Text);
            request.AddParameter("_password", passwordText.Text);

            client.ExecuteAsync<Account>(request, response => {

                Device.BeginInvokeOnMainThread ( () => {
                    loginActivity.IsRunning = false;

                    if(response.StatusCode == HttpStatusCode.OK)
                    {
                        if(OnAuthenticated != null)
                        {
                            OnAuthenticated(this, new EventArgs());
                        }
                    } …
Run Code Online (Sandbox Code Playgroud)

c# events xamarin xamarin.forms

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

实体中的Symfony/Doctrine关系COUNT

正如标题所述,

我想运行1个查询来从表中获取结果以及各自关系的计数.

假设我有一个Person与实体有OneToMany关系的Friend实体

Person实体可能如下所示:

class Person
{
    /**
     * @ORM\OneToMany(...)
     */
    protected $friends;

    public function __construct()
    {
        $this->friends = new ArrayCollection();
    }

    ...
}
Run Code Online (Sandbox Code Playgroud)

我想要实现的经典SQL解决方案可能如下所示:

SELECT p.*, COUNT(f.id) as friendsCount
FROM Persons p
LEFT JOIN Friends f
ON f.person_id = p.id
GROUP BY p.id
Run Code Online (Sandbox Code Playgroud)

现在我想知道这是否也可以在DQL中完成并将数值存储到Person实体中

可以说,我扩大Person实体,如:(请记住,这只是一个想法)

class Person
{
    /**
     * @ORM\OneToMany(...)
     */
    protected $friends;

    protected $friendsCount;

    public method __construct()
    {
        $this->friends = new ArrayCollection();
    } …
Run Code Online (Sandbox Code Playgroud)

entity count relationship symfony doctrine-orm

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

Xamarin使用DataTemplate形成UICollectionView

我正在尝试在Xamarin Forms中创建一个自定义视图,转换为IOS中的UICollectionView.

这第一件事很简单:

视图:

public class CollectionView : View
{

}
Run Code Online (Sandbox Code Playgroud)

渲染:

public class CollectionViewRenderer : ViewRenderer<CollectionView, UICollectionView>
{

    protected override void OnElementChanged(ElementChangedEventArgs<CollectionView> e)
    {
        base.OnElementChanged(e);

        if (Control == null)
        {
            SetNativeControl(new UICollectionView(new CGRect(0, 0, 200, 200), new UICollectionViewFlowLayout()));
        }

        if (e.NewElement != null)
        {
            ...
            Control.Source = new CollectionViewSource(a, this);
            Control.ReloadData();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我想用DataTemplates(来自DataTemplateSelector)提供这个CollectionView.但我无法找到注册类的方法:

从模板中你可以做到:

Template.CreateContent();
Run Code Online (Sandbox Code Playgroud)

获取UI元素.

但是如何在collectionView中将它注册到CollectionSource中以便出列

例如:

CollectionView.RegisterClassForCell(typeof(????), "CellId");
Run Code Online (Sandbox Code Playgroud)

datatemplate xamarin.ios datatemplateselector uicollectionview xamarin.forms

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

使用 JSON.net 写入 HttpClient 请求流

我有一些相当大的 json 需要通过 post 请求发送到 Api。

使用 C# (Xamarin) 我想将此 Json 直接写入请求流。

我尝试实现自定义 HttpContent,但我要么收到“无法从关闭的流中读取”异常(当我使用 dispose 时),要么收到空正文。

请不要建议使用 PushStreamContent,我无法在 Xamarin 中访问它,我也希望了解这一点。

例如:

public class JsonContent : HttpContent
{
    public object SerializationTarget { get; private set; }
    public JsonContent(object serializationTarget)
    {
        SerializationTarget = serializationTarget;
        this.Headers.ContentType = new MediaTypeHeaderValue("application/json");
    }
    protected override async Task SerializeToStreamAsync(Stream stream, TransportContext context)
    {
        using (StreamWriter writer = new StreamWriter(stream))
        using (JsonTextWriter jsonWriter = new JsonTextWriter(writer))
        {
            JsonSerializer ser = new JsonSerializer();
            ser.Serialize(jsonWriter, SerializationTarget);
        }



    // Should …
Run Code Online (Sandbox Code Playgroud)

c# json

5
推荐指数
0
解决办法
1643
查看次数

类型提示模型数组

我想知道您是否可以在 php(更明确地 Laravel)中键入一组模型。

一个代码示例:

use App\User;

public function index(User $user)
{
    // do something with the user
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,有没有办法对用户模型数组进行类型提示:

use App\User;

public function index(array User $users) //this is wrong ..
{
    // do something with the users
}
Run Code Online (Sandbox Code Playgroud)

php arrays type-hinting laravel

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

ReactiveUI Xamarin iOS路由

我开始在Xamarin iOS中尝试使用Reactive UI,但是我对应该如何处理路由感到困惑。

让我们以典型的“ LoginViewModel”为例:

public class LoginViewModel : ReactiveObject
{
    private readonly ReactiveCommand loginCommand;
    public ReactiveCommand LoginCommand => this.loginCommand;

    string username;
    public string Username
    {
        get { return username; }
        set { this.RaiseAndSetIfChanged(ref username, value); }
    }

    string password;
    public string Password
    {
        get { return password; }
        set { this.RaiseAndSetIfChanged(ref password, value); }
    }

    public LoginViewModel()
    {
        var canLogin = this.WhenAnyValue(
            x => x.Username,
            x => x.Password,
            (u, p) => !string.IsNullOrEmpty(u) && !string.IsNullOrEmpty(p)
        );

        this.loginCommand = ReactiveCommand.CreateFromTask(async () …
Run Code Online (Sandbox Code Playgroud)

routing xamarin.ios reactiveui xamarin

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

ui-router中的嵌套承诺解析

我一直在努力解决以下问题:

我希望在视图显示之前得到一些数据,(解析).但是有些数据取决于另一个承诺的结果.

它是这样的:我从$ stateParams获取作业ID(索引)并在我的服务中查找数据.一旦完成,从这个结果(作业),我可以查找设置和楼层(每个来自不同的服务),都返回一个承诺.

我到目前为止所得到的

jobinfo: function(Jobs, Floor, JobSetting, $stateParams, $q) {

    var defer = $q.defer();

        Jobs.getByIndex($stateParams.index)
        .then(function(job) {
            console.log('got jobs');
            $q.all({floors: Floor.getByJob(job), settings: JobSetting.getByJob(job)})
            .then(function(info) {
                console.log('got info');
                defer.resolve([job, info.floors, info.settings]);
            });
        });

    return defer.promise;
}
Run Code Online (Sandbox Code Playgroud)

拿2

jobinfo: function(Jobs, Floor, JobSetting, $stateParams, $q) {

    return Jobs.getByIndex($stateParams.index)
        .then(function(job) {
            console.log('got jobs');
            return $q.all({floors: Floor.getByJob(job), settings: JobSetting.getByJob(job)})
            .then(function(info) {
                console.log('got info');
                return [job, info.floors, info.settings];
            });
        });
}
Run Code Online (Sandbox Code Playgroud)

两者似乎都失败了,我甚至都没有console.log回来.

PS:我把剩下的代码留了出来,显然它们被包裹了

resolve: {
...
}
Run Code Online (Sandbox Code Playgroud)

并在正确的地方定义.

有人可以如此温柔地指出我正确的方向吗?


我最终得到的解决方案如下:(感谢avcajaraville) …

nested resolve promise angularjs angular-ui-router

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