我有一个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) 我的控制器中有一个通用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) 我目前面临以下问题:
我试图在用户输入有效凭据时触发事件,以便我可以切换页面等等.
问题是由于某些原因我无法挂钩事件(虽然我很确定这会是一些愚蠢的事情).
发射事件的类:
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) 正如标题所述,
我想运行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) 我正在尝试在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
我有一些相当大的 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) 我想知道您是否可以在 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) 我开始在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) 我一直在努力解决以下问题:
我希望在视图显示之前得到一些数据,(解析).但是有些数据取决于另一个承诺的结果.
它是这样的:我从$ 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) …
c# ×2
laravel ×2
php ×2
xamarin ×2
xamarin.ios ×2
angularjs ×1
arrays ×1
asp.net-core ×1
count ×1
datatemplate ×1
doctrine-orm ×1
entity ×1
events ×1
json ×1
jwt ×1
nested ×1
promise ×1
reactiveui ×1
relationship ×1
resolve ×1
routing ×1
swashbuckle ×1
symfony ×1
type-hinting ×1